快速排序的主要思路:html
1.在數組首尾處各設一個標記web
2.取出數組第一個值做爲中樞值數組
3.全部數據跟中樞值比較:比中樞值小的放中樞值左邊,首部標記++往右推一位,大的放中樞值右邊,尾部標記--往左推一位(從小到大排序)ui
4.先從尾部開始與中樞值比較,若是尾部標記的值比中樞值大直接把標記往左推一位,若是尾部標記比中樞值小就把尾部標記的值放到首部標記的位置,而後開始從首部開始與中樞值比較,若是首部標記的值比中樞值小直接把標記往右推一位,若是首部標記比中樞值大就把首部標記的值放到尾部標記的位置,一直循環直至首尾標記相遇。spa
5.首尾標記相遇表明找到了中樞值的準確位置,此時將數組從中樞值一分爲二,使用遞歸繼續對中樞值左右兩側的數據使用相同的方法進行排序;視頻
C#示例代碼:htm
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace QuickSort { class Program { static void Main(string[] args) { int[] array = { 7, 1, 5, 4, 6, 7, 3, 9, 8, 2 }; QuickSort(0, 9, ref array); for (int i = 0; i < 10; i++) { Console.WriteLine(array[i]); } return; } static void QuickSort(int iMin,int iMax,ref int[] a) { int i = iMin, j = iMax, iPivot = a[iMin]; if (iMin >= iMax) { return; } while (i < j) { while (a[j] >= iPivot && i < j) { j--; } if (i < j) { a[i] = a[j]; i++; } while (a[i] <= iPivot && i < j) { i++; } if (i < j) { a[j] = a[i]; j--; } } a[i] = iPivot; QuickSort(iMin, i - 1, ref a); QuickSort(i + 1, iMax, ref a); } } }