C# 快速排序

來源:互聯網
上載者:User
C# 快速排序

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Sort{    class QuickSorter    {        private static int[] myArray;        private static int arraySize;        public static int[] Sort(int[] a)        {            arraySize = a.Length;            QuickSort(a, 0,arraySize- 1);    return a;        }        private static void QuickSort(int[] myArray, int left, int right)        {            int i, j, s;            if (left < right)            {                i = left - 1;                j = right + 1;                s = myArray[(i + j) / 2];                while (true)                {                    while (myArray[++i] < s) ;                    while (myArray[--j] > s) ;                    if (i >= j)                        break;                    Swap(ref myArray[i], ref myArray[j]);                }                QuickSort(myArray, left, i - 1);                QuickSort(myArray, j + 1, right);            }        }        private static void Swap(ref int left, ref int right)        {            int temp;            temp = left;            left = right;            right = temp;        }    }}

快速排序的思想:

設要排序的數組是A[0]……A[N-1],首先任意選取一個資料(通常選用數組的第一個數)作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。值得注意的是,快速排序不是一種穩定的排序演算法,也就是說,多個相同的值的相對位置也許會在演算法結束時產生變動。

一趟快速排序的演算法是:

1)設定兩個變數i、j,排序開始的時候:i=0,j=N-1;

2)以第一個數組元素作為關鍵資料,賦值給key,即key=A[0];

3)從j開始向前搜尋,即由後開始向前搜尋(j--),找到第一個小於key的值A[j],將值為key的項與A[j]交換;

4)從i開始向後搜尋,即由前開始向後搜尋(i++),找到第一個大於key的A[i],將值為key的項與A[i]交換;

5)重複第3步

6)重複第3、4、5步,直到i=j; (3,4步中,沒找到合格值,即3中A[j]不小於key,4中A[j]不大於key的時候改變j、i的值,使得j=j-1,i=i+1,直至找到為止。找到合格值,進行交換的時候i, j指標位置不變。另外,i==j這一過程一定正好是i+或j-完成的時候,此時令迴圈結束)。

例子:

以一個數組作為樣本,取區間第一個數為基準數。

i = 3; j = 7; X=72

再重複上面的步驟,先從後向前找,再從前向後找。

從j開始向前找,當j=5,符合條件,將a[5]挖出填到上一個坑中,a[3] = a[5]; i++;

從i開始向後找,當i=5時,由於i==j退出。

此時,i = j = 5,而a[5]剛好又是上次挖的坑,因此將X填入a[5]。

數組變為:

以上就是C# 快速排序的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.