package jzoffer; public class QuickSortLisiming { public static void main(String[] args) { int [] a = {5,2,8,4,22,31,0,1,9}; int start = 0; int end = a.length-1; System.out.println("原数组如下:"); new QuickSortLisiming().printList(a); System.out.println("经过快速排序后的数组如下:"); new QuickSortLisiming().QuickSort(start,end,a); } private void printList(int [] a){ for(int i =0;i<a.length;i++){ System.out.print(a[i]+" "); } System.out.println(""); } private void QuickSort(int left,int right,int [] a){ int temp = a[left]; int i = left; //创建一个左边的小人i int j = right;//创建一个右边的小人j if(i>j){ return;//特殊情况判断,说明数组不合法,直接返回 } while(i < j){//i=j说明两个小人相遇了,我们一趟排序就完成了 while(a[j]>=temp && i<j){ //原谅我没加等号,从上一道题一直看到现在5:38,我想哭,哇 j--;//这个是右边的小人向左边移动 } while(a[i]<=temp && i<j){ i++; } int t = a[i]; a[i] = a[j]; a[j] = t; } //改变基准数(交换到a[i]位置),当然这里写a[i]或者a[j]都可以 int t = a[i]; a[i] = a[left]; a[left] = t; printList(a); QuickSort(left,i-1,a);//因为基准数最终回到了最中间i,所以我们递归左边就是(lefe,i-1) QuickSort(i+1,right,a);//右边就是(i+1,right) } }
数据结构与算法-----交换排序-----快速排序
猜你喜欢
转载自blog.csdn.net/lsm18829224913/article/details/80331524
今日推荐
周排行