快速排序的原理
在一个数组中,选择一个key,通过一次排序将数组分为两组,大于key的放在左边,小于key的放在key的右边
- 取i j i为这个数组的起始 j为数组的长度-1
- 取key 为 arr[i]
- 当i<j时,从左边开始取大于key的数,从右边开始取小于key的数 将他们交换位置
- 重置key 将key与a[i]交换位置
- key左边的和右边的分别再次进行
递柜快速排序//传入一个数组 public static void quickSort(int []a){ //0和a.length-1分别代表数组的起始和结束的标识 if(a.length>0){ quickSort(a,0,a.length-1); } } public static void quickSort(int []a,int low,int hight){ if(low>hight){ return; } int i=low; int j=hight; int key=a[low]; //当i=j时 退出循环 while(i<j){ //从右往左找到第一个小于key的 while(i<j && a[j]>key){ j--; } while(i<j && a[i]<=key){ i++; } //交换两个数的位置 if(i<j){ int tmp=a[i]; a[i]=a[j]; a[j]=tmp; } } //调整key的位置 将a[i]和key交换 int tmp=a[i]; a[i]=a[low]; a[low]=tmp; //对key左边的数进行快速排序 quickSort(a,low,i-1); //对key右边的数进行快排 quickSort(a, i+1, hight); }