快速排序介绍
快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列
快速排序示意图
代码实现
package sort; import java.util.Arrays; public class QuickSort { public static void main(String[] args) { // int[] arr={-9,78,0,23,-567,70}; int[] arr={-9,78,0,23,-567,70,-1,300,1234}; quickSort(arr,0,arr.length-1); System.out.println(Arrays.toString(arr)); } //快速排序 public static void quickSort(int[] arr,int left,int right){ int l=left;//左下标 int r=right;//右下标 int pivot=arr[(left+right)/2];//中轴值 int temp=0;//临时变量 /* * while循环的目的是让pivot值小的放在左边 * 比pivot大的放在右边 * */ while (l<r){ //在privot的左边一直找,找到大于等于pivot值,才退出 while(arr[l]<pivot){ l+=1; } //在pivot的右边一直找,找到小于等于pivot的值,才退出 while (arr[r]>pivot){ r-=1; } //如果l>=r说明pivot左右两边的值,已经按照左边小于等于pivot,右边大于等于pivot if(l>=r){ break; } //交换 temp=arr[l]; arr[l]=arr[r]; arr[r]=temp; //如果交换完后,发现这个arr[r]==pivot,r--前移 if(arr[l]==pivot){ r-=1; } //如果交换完后,发现这个arr[r]==pivot,l++后移 if(arr[r]==pivot){ l+=1; } } //如果l==r,必须l++,r==,否则为出现栈溢出 if(l==r){ l+=1; r-=1; //向左递归 if(left<r){ quickSort(arr, left, r); } //向右递归 if(right>l){ quickSort(arr,l,right); } } } }
运行结果