1.自我介紹
1.快速排序是由東尼·霍爾所發展的一種排序算法。
2.快速排序又是一種分而治之思想在排序算法上的典型應用。
3.本質上來看,快速排序應該算是在冒泡排序基礎上的遞歸分治法。
2.思想共享?
快速排序(Quicksort)是對冒泡排序的一種改進。基本思想是:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然后再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。
3.思路分析
從數列中挑出一個元素,稱為 "基準"(pivot);
重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的后面(相同的數可以到任一邊)。在這個分區退出之后,該基準就處于數列的中間位置。這個稱為分區(partition)操作;
遞歸地(recursive)把小于基準值元素的子數列和大于基準值元素的子數列排序;
??
4.實戰分析
public static void quickSort(int[] array, int left, int right) {int l = left; //左下標int r = right;//右下表int temp = 0; //臨時變量//pivot 中軸值int pivot = array[(l + r) / 2];//讓比pivot小的值放到左邊,比pivot大的值放到右邊while (l < r) {while (array[l] < pivot) {// 左邊直到找到>=pivotl += 1;}while (array[r] > pivot) {// 右邊直到找到<=pivotr -= 1;}if (l >= r) { //說明pivot左邊的都<=pivot,右邊的都>=pivotbreak;}//交換temp = array[l];array[l] = array[r];array[r] = temp;//如果交換完之后,發現arr[l]==pivot,r--;,前移if (array[l] == pivot) {r -= 1;}//如果交換完之后,發現arr[r]==pivot,l++;,前移if (array[r] == pivot) {l += 1;}}//如果l==r,l++;r--;否則棧溢出if (l == r) {l += 1;r -= 1;}//向左遞歸if (left < r) {quickSort(array, left, r);}//向右遞歸if (right > l) {quickSort(array, l, right);}}
5.心驚膽戰的執行一下
int[] arr = new int[]{-9, 78, 0, 23, -567, 70};quickSort(arr, 0, arr.length - 1);System.out.println(Arrays.toString(arr));
?
?