国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

排序算法之快速排序

2019-11-17 02:47:41
字體:
來源:轉載
供稿:網友
排序算法之快速排序

快排定義:

  設要排序的數組是A[0]……A[N-1],首先任意選取一個數據(通常選用數組的第一個數)作為關鍵數據,然后將所有比它小的數都放到它前面,所有比它大的數都放到它后面,這個過程稱為一趟快速排序。

基本思想:

快速排序采用的思想是分治思想。

快速排序是找出一個元素(理論上可以隨便找一個)作為基準(pivot),然后對數組進行分區操作,使基準左邊元素的值都不大于基準值,基準右邊的元素值 都不小于基準值,如此作為基準的元素調整到排序后的正確位置。遞歸快速排序,將其他n-1個元素也調整到排序后的正確位置。最后每個元素都是在排序后的正 確位置,排序完成。所以快速排序算法的核心算法是分區操作,即如何調整基準的位置以及調整返回基準的最終位置以便分治遞歸。

舉例說明一下吧,這個可能不是太好理解。假設要排序的序列為

22 4 9 3 6 7 15首先用2當作基準,使用i,j兩個指針分別從兩邊進行掃描,把比2小的元素和比2大的元素分開。首先比較2和5,5比2大,j左移

22 4 9 3 6 715 比較2和1,1小于2,所以把1放在2的位置

2149 3 6 7 1 5 比較2和4,4大于2,因此將4移動到后面

2149 3 674 5 比較2和7,2和6,2和3,2和9,全部大于2,滿足條件,因此不變

經過第一輪的快速排序,元素變為下面的樣子

[1] 2 [4 9 3 6 7 5]

之后,在把2左邊的元素進行快排,由于只有一個元素,因此快排結束。右邊進行快排,遞歸進行,最終生成最后的結果。

class PRogram{    static void Main(string[] args)    {        int[] array = new[] { 234, 632, 23, 643, 2, 6, -2, 423, 2342, 43 };        Console.WriteLine("排序前:");        Console.WriteLine(string.Join(",", array));        QuickSort(array, 0, array.Length - 1);        Console.WriteLine("排序后:");        Console.WriteLine(string.Join(",", array));        Console.ReadKey();    }        /// <summary>    /// 快速排序    /// </summary>    /// <param name="sources">目標數組</param>    /// <param name="left">數組最小索引</param>    /// <param name="right">數組最大索引</param>    private static void QuickSort(int[] sources, int left, int right)    {        // 終止遞歸,排序完畢        if (left > right) return;        int pivot = sources[left], //基準數            low = left,            high = right;        while (low < high)        {            // 從右往左遞減判斷            while (low < high && sources[high] > pivot)                --high;            // 小于基準數的放在左邊            sources[low] = sources[high];            // 從左往右遞增判斷            while (low < high && sources[low] < pivot)                ++low;            // 大于基準數的放在右邊            sources[high] = sources[low];        }        // 一遍排序后,左邊都小于基準數,右邊都大于基準數        sources[low] = pivot;        // 分區遞歸        QuickSort(sources, left, low - 1);        QuickSort(sources, low + 1, right);    }}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 韶山市| 昭觉县| 余姚市| 江源县| 南漳县| 屏南县| 济宁市| 霸州市| 五华县| 怀来县| 柘荣县| 友谊县| 东兴市| 德化县| 逊克县| 秦安县| 澄迈县| 漠河县| 安平县| 淮安市| 通州区| 贡嘎县| 苍山县| 睢宁县| 广东省| 沿河| 姜堰市| 闸北区| 大邑县| 特克斯县| 安溪县| 新竹县| 馆陶县| 长乐市| 湘西| 桑植县| 旬阳县| 太仆寺旗| 东港市| 陆川县| 东源县|