排序:快速排序Quick Sort
阿新 • • 發佈:2017-06-27
++ sort rgs partition 重復 foreach 一聲 reac 中一
原理,通過一趟掃描將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然後再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列
舉個例子
如無序數組[6 2 4 1 5 9]
a),先把第一項[6]取出來,
用[6]依次與其余項進行比較,
如果比[6]小就放[6]前邊,2 4 1 5都比[6]小,所以全部放到[6]前邊
如果比[6]大就放[6]後邊,9比[6]大,放到[6]後邊,//6出列後大喝一聲,比我小的站前邊,比我大的站後邊,行動吧!霸氣十足~
一趟排完後變成下邊這樣:
排序前 6 2 4 1 5 9
排序後 2 4 1 5 6 9
b),對前半拉[2 4 1 5]繼續進行快速排序
重復步驟a)後變成下邊這樣:
排序前 2 4 1 5
排序後 1 2 4 5
前半拉排序完成,總的排序也完成:
排序前:[6 2 4 1 5 9]
排序後:[1 2 4 5 6 9]
排序結束
以下代碼實現僅供參考
static int partition(int[] unsorted, int low, int high) { int pivot = unsorted[low]; while (low < high) {while (low < high && unsorted[high] > pivot) high--; unsorted[low] = unsorted[high]; while (low < high && unsorted[low] <= pivot) low++; unsorted[high] = unsorted[low]; } unsorted[low] = pivot;return low; } static void quick_sort(int[] unsorted, int low, int high) { int loc = 0; if (low < high) { loc = partition(unsorted, low, high); quick_sort(unsorted, low, loc - 1); quick_sort(unsorted, loc + 1, high); } } static void Main(string[] args) { int[] x = { 6, 2, 4, 1, 5, 9 }; quick_sort(x, 0, x.Length - 1); foreach (var item in x) { Console.WriteLine(item + ","); } Console.ReadLine(); }
排序:快速排序Quick Sort