快速排序的算法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序的算法相关的知识,希望对你有一定的参考价值。
自学java到数组时,学习到了两种排序方法:选择排序和冒泡排序,冒泡排序是选择排序的进阶阶段,精简了运算的过程。了解到,java语言已经提供了排序的方法:通过util.Arrays.sort可以对数组进行自动排序,而排序方法用的是快速排序的一种。
快速排序是冒泡排序的进阶阶段,那么快速排序的基本原理又是什么呢。通过查阅资料,了解了算法,自己也尝试了写了一些快速排序的算法原理。
1 package array; 2 //快速排序原理 3 import java.util.Arrays; 4 public class QuickSort 5 { 6 public static void main(String[] arg) 7 { 8 int[] sort={56,656,23,45,523,46,1,34,78};//对这个乱序数组进行排序。 9 int low=0; //定义一个起始的角标和末尾的角标。 10 int tall=sort.length-1; 11 suanfa(sort,low,tall); 12 System.out.print(Arrays.toString(sort)); 13 14 } 15 public static void suanfa(int[] sort,int low,int tall)//把这个数组和两端的角标带入新的方法中 16 { 17 int key=sort[low];//确定一个key值,用这个值与其他值比较。一般选key为第一个值或者最后一个值。 18 int a=low; //定义a,b 这两个指针,两端开始都向中间移动。用key值和2个指针指的数值比较。 19 int b=tall; 20 while (a<b) //两指针不能重合或者穿过去,重合时key的位置就已经确定了。 21 { 22 while(a<b&&sort[b]>key)//右边的指针向左移动,与key比较。 23 { 24 b--; 25 } 26 if(key>=sort[b])//当key的值大于右边指针的值时。2端指针的值交换位置。 27 { 28 int tamp=sort[a]; 29 sort[a]=sort[b]; 30 sort[b]=tamp; 31 } 32 while(a<b&&sort[a]<key)//左边的指针向右移动,与key比较。 33 { 34 a++; 35 } 36 if(key<=sort[a])//当key的值小于右边指针的值时。2端指针的值交换位置。 37 { 38 int tamp=sort[a]; 39 sort[b]=sort[a]; 40 sort[a]=tamp; 41 } 42 } 43 //这样就确定了key的位置,key的左边全是小于key的数;右边全是大于key的数,分为了2部分。进行递归循环就确定所有值的位置了。 44 if(b<tall) 45 { 46 suanfa(sort,b+1,tall); 47 } 48 if(a>low) 49 { 50 suanfa(sort,low,a-1); 51 } 52 } 53 }
打印结果为[1, 23, 34, 45, 46, 523, 78, 656, 656],证明是正确的
以上是关于快速排序的算法的主要内容,如果未能解决你的问题,请参考以下文章