国产探花免费观看_亚洲丰满少妇自慰呻吟_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);    }}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阿坝县| 镇雄县| 新乡县| 满洲里市| 吉安市| 安阳县| 金秀| 南阳市| 新闻| 万荣县| 邢台县| 内江市| 正阳县| 德钦县| 长白| 六盘水市| 同心县| 资兴市| 中方县| 沾益县| 新和县| 怀仁县| 碌曲县| 武平县| 丰顺县| 亚东县| 安顺市| 图木舒克市| 怀宁县| 石首市| 华蓥市| 安龙县| 上栗县| 辽阳县| 临沂市| 巨鹿县| 德清县| 江安县| 驻马店市| 菏泽市| 商水县|