C# 快速(二分法)排序

來源:互聯網
上載者:User

快速(二分法)排序的思想是將數組劃分為兩邊,以某個節點v為界(設這個節點的值為 v),在節點v左邊的所有元素都小於 v, 在節點v右邊的所有元素都大於v.

這樣不停地劃分,到最後整個數組就是有序的了。

 

具體分成兩邊的思路為(起始下標為start, 結束下標為 end):

選擇v = a[end]作為中介點

先從start開始掃描,遇到a[++i] < v停下來,接著從end開始掃描a[--j] > v停下來,交換a[i]和a[j]

接著從i+1開始掃描,另一邊接著從j-1開始掃描。注意邊界條件if (i >= j) break; 掃描完成後就找到了v應該放得位置,交換Swap(ref a[i], ref a[end]);這樣就完成了一次劃分。

該演算法的平均時間複雜度為nLgn,最壞的情況是n的平方。該演算法適合使用於大資料量的排序:

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace QuickSort{    class Program    {        static void Main(string[] args)        {                      int[] a ={1,6,4,3,8,5,21,9,31,81,101,55,62, 151, 7,2,10};            quicksort(a, 0, a.Length-1);            for (int i = 0; i < a.Length; i++)            {                Console.WriteLine(a[i]);            }            Console.Read();        }        static void quicksort(int[] a, int start, int end)        {            int i;            if (end - start == 1)            {                if (a[start] > a[end])                {                    Swap(ref a[start], ref a[end]);                }                return;            }                            if (end - start == 0)            {                               return;            }            i = partition(a, start, end);            if (i > start)            {                quicksort(a, start, i - 1);            }            if (i < end)            {                quicksort(a, i + 1, end);            }        }        static int partition(int[] a, int start, int end)        {          int i = start-1;          int j = end;          int v = a[end];          for (; ; )            {                while (i < end && a[++i] < v) ;                while (j > start && a[--j] > v) ;                            if (i > = j) break;                Swap(ref a[i], ref a[j]);            }          Swap(ref a[i], ref a[end]);          return i;        }        static void Swap(ref int a, ref int b)        {            int temp = a;            a = b;            b = temp;        }    }}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.