欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c# 快速排序算法

 更新時間:2013年10月23日 22:08:42   作者:  
快速排序使用分治法(Divide and conquer)策略來把一個串行(list)分為兩個子串行(sub-lists)

快速排序使用分治法(Divide and conquer)策略來把一個串行(list)分為兩個子串行(sub-lists)。

步驟為:

1.從數(shù)列中挑出一個元素,稱為 "基準"(pivot),

2.重新排序數(shù)列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的后面(相同的數(shù)可以到任一邊)。在這個分區(qū)退出之后,該基準就處于數(shù)列的中間位置。這個稱為分區(qū)(partition)操作。

3.遞歸地(recursive)把小于基準值元素的子數(shù)列和大于基準值元素的子數(shù)列排序。

遞歸的最底部情形,是數(shù)列的大小是零或一,也就是永遠都已經(jīng)被排序好了。雖然一直遞歸下去,但是這個算法總會退出,因為在每次的迭代(iteration)中,它至少會把一個元素擺到它最后的位置去。
 

平均時間復(fù)雜度 \Theta(n\log n)

 快速排序通常明顯比其他Ο(n log n) 算法更快

快速排序

復(fù)制代碼 代碼如下:

public static void Sort(int[] numbers)
{
    QuickSort(numbers, 0, numbers.Length - 1);
}
private static void QuickSort(int[] numbers, int left, int right)
{
    if (left < right)
    {
        int middle = numbers[(left + right) / 2];
        int i = left - 1;
        int j = right + 1;
        while (true)
        {
            while (numbers[++i] < middle) ;

            while (numbers[--j] > middle) ;

            if (i >= j)
                break;

            Swap(numbers, i, j);
        }

        QuickSort(numbers, left, i - 1);
        QuickSort(numbers, j + 1, right);
    }
}

private static void Swap(int[] numbers, int i, int j)
{
    int number = numbers[i];
    numbers[i] = numbers[j];
    numbers[j] = number;
}

調(diào)用:

復(fù)制代碼 代碼如下:

int[] y = new int[] {4,8,2222,2,1,121,13,434,56,1111,65,7,8 };
Sort(y);
foreach (var item in y)
{
    Console.WriteLine(item);
} // 1 2 4 7 8 8 13 56 65 121 434 1111 2222

相關(guān)文章

  • Unity幸運轉(zhuǎn)盤實戰(zhàn)項目

    Unity幸運轉(zhuǎn)盤實戰(zhàn)項目

    這篇文章主要為大家詳細介紹了Unity幸運轉(zhuǎn)盤實戰(zhàn)項目,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • C#自定義控件添加右鍵菜單的方法

    C#自定義控件添加右鍵菜單的方法

    這篇文章主要介紹了C#自定義控件添加右鍵菜單的方法,本文用到control控件,專門自定義右鍵菜單,下面小編給大家整理下,有需要的小伙伴可以來參考下
    2015-08-08
  • C#中標準的IDispose模式代碼詳解

    C#中標準的IDispose模式代碼詳解

    在本篇文章中小編給大家分享的是關(guān)于C#中標準的IDispose模式的實例用法相關(guān)內(nèi)容,有需要的朋友們測試下。
    2019-09-09
  • C# 日歷類功能的實例代碼

    C# 日歷類功能的實例代碼

    本文通過實例代碼給大家介紹了C# 日歷類的相關(guān)知識,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-06-06
  • C#實現(xiàn)的文件壓縮和解壓縮類

    C#實現(xiàn)的文件壓縮和解壓縮類

    這篇文章主要介紹了C#實現(xiàn)的文件壓縮和解壓縮類,實例分析了C#針對文件壓縮與解壓縮的常用技巧,非常具有實用價值,需要的朋友可以參考下
    2015-03-03
  • C#利用GDI+給圖片添加文字(文字自適應(yīng)矩形區(qū)域)

    C#利用GDI+給圖片添加文字(文字自適應(yīng)矩形區(qū)域)

    這篇文章主要給大家介紹了關(guān)于C#利用GDI+給圖片添加文字(文字自適應(yīng)矩形區(qū)域)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面來一起看看吧。
    2018-04-04
  • C#集合遍歷時刪除和增加元素的方法

    C#集合遍歷時刪除和增加元素的方法

    這篇文章主要介紹了C#集合遍歷時刪除和增加元素的方法,結(jié)合實例形式分析了C#針對集合元素的遍歷、添加與刪除等操作實現(xiàn)方法與注意事項,需要的朋友可以參考下
    2016-06-06
  • WPF基于物理像素繪制圖形

    WPF基于物理像素繪制圖形

    這篇文章介紹了WPF基于物理像素繪制圖形的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • C# 泛型的簡單理解(安全、集合、方法、約束、繼承)分享

    C# 泛型的簡單理解(安全、集合、方法、約束、繼承)分享

    這篇文章介紹了C# 泛型的簡單理解(安全、集合、方法、約束、繼承),有需要的朋友可以參考一下
    2013-10-10
  • C#采用Winform實現(xiàn)類似Android的Listener

    C#采用Winform實現(xiàn)類似Android的Listener

    這篇文章主要介紹了C#采用Winform實現(xiàn)類似Android的Listener,很實用的技巧,需要的朋友可以參考下
    2014-08-08

最新評論