快速排序 (Quick Sort)
简介:
快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
描述:
- 从数列中挑出一个元素,称为 “基准”;
- 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区( partition )操作;
- 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
Java代码
以下代码为方便复制
public static void main(String[] args) { int[] array = new int[]{0,53,63,38,71,25,22,11,95,38}; int[] sort = sort(array,0,array.length - 1); System.out.println(Arrays.toString(sort)); } public static int[] sort(int []array,int L,int R) { //代表左边的指针 int i = L; //代表有边的指针 int j = R; //基数 int bais = array[L]; //条件:左指针一定要小于等于右指针 while(i <= j){ //1、如果右边的指针指的数大于基数,则指针左移,直到找到比基数小的数的指针 while (array[j] > bais){ j--; } //2、如果左边的指针小于基数,则右移指针,直到找到比基数大的数的指针 while (array[i] < bais){ i++; } //3、如果左指针小于等于右指针,则左右指针指的数交换 if(i <= j){ int temp = array[i]; array[i] = array[j]; array[j] = temp; i++; j--; } } if(L < j){ sort(array,L,j); } if(R > i){ sort(array,i,R); } return array; }