快速排序的基本思想是:
通过一趟排序将要排序的数据分割成独立的两部分——其中一部分的所有数据都比另外一部分的所有数据都要小,
然后再按此方法对这两部分数据分别进行快速排序,
整个排序过程可以递归进行,以此达到整个数据变成有序序列。
关键值,交换,界限,递归
关键字在一趟排序中会反复移动
Java代码如下:
package learn.leetcode.algorithm; import java.util.Arrays; import java.util.Random; public class QuickSort { public static void main(String[] args) { int[] arr = {6,2,8,7,3,6,9,1,8,9}; Random ra = new Random(); for (int i = 0; i < arr.length; ++i) { arr[i] = ra.nextInt(20); } System.out.println(Arrays.toString(arr)); sort(arr, 0, arr.length - 1); System.err.println(Arrays.toString(arr)); } public static void sort(int[] arr, int start, int end) { int left = start, right = end; if (left >= right) { return; } // int flag = arr[start]; while (left < right) { while (left < right && arr[left] <= arr[right]) right--; if (left < right) { int temp = arr[left]; arr[left] = arr[right]; arr[right] = temp; left++; } while (left < right && arr[left] <= arr[right]) left++; if (left < right) { int temp = arr[left]; arr[left] = arr[right]; arr[right] = temp; right--; } } // flag = arr[left]; sort(arr, start, left - 1); sort(arr, left + 1, end); } }