C#排序算法之快速排序
更新時間:2010年09月28日 08:57:38 作者:
下面給出的代碼是以數(shù)組最后一個元素作為參考元素,這僅是參考元素選取的方式之一。
快速排序?qū)崿F(xiàn):
namespace QuickSort
{
class QuickSort
{
public static void Sort(int[] array)
{
DoSort(array,0, array.Length-1);
}
private static void DoSort( int[] array, int start, int end)
{
if( start < end)
{
int temp = Partition(array, start, end);
DoSort(array, start, temp-1);
DoSort(array, temp + 1, end);
}
}
private static int Partition(int[] array,int start, int end)
{
int index = start - 1;
for( var i=start; i< end; i++)
{
if( array[i] < array[end])
{
index++;
Swap(array, index, i);
}
}
Swap(array, index +1, end);
return index + 1;
}
private static void Swap(int[] array, int index1, int index2)
{
var temp = array[index1];
array[index1] = array[index2];
array[index2] = temp;
}
}
}
以上即為快速排序的代碼,這里有兩個重要的方法:
1、Partition:該方法是以數(shù)組的某個元素為參考元素(軸元素或主元素),將數(shù)組劃分成三個區(qū)域:
【<=參考元素】【參考元素】【>=參考元素】
2. DoSort:該方法會調(diào)用Partition將數(shù)組分區(qū),并在新產(chǎn)生的子數(shù)組上遞歸調(diào)用最終達(dá)到有序的目的。
上面給出的代碼是以數(shù)組最后一個元素作為參考元素,這僅是參考元素選取的方式之一。我們也可以隨即選取數(shù)組的元素或者數(shù)組中間的元素作為參考元素。事實上參考元素的選取對快速排序的性能有很大影響。如果每次選取的參考元素能將數(shù)組分成相對均衡的區(qū)域,快速排序?qū)⒊蔀樽羁斓呐判蛩惴?;但在另一種極端情形下,每次分成的數(shù)組都是1和n-1的關(guān)系,快速排序又會變的很慢。具體的性能數(shù)據(jù)后面再來討論研究。
復(fù)制代碼 代碼如下:
namespace QuickSort
{
class QuickSort
{
public static void Sort(int[] array)
{
DoSort(array,0, array.Length-1);
}
private static void DoSort( int[] array, int start, int end)
{
if( start < end)
{
int temp = Partition(array, start, end);
DoSort(array, start, temp-1);
DoSort(array, temp + 1, end);
}
}
private static int Partition(int[] array,int start, int end)
{
int index = start - 1;
for( var i=start; i< end; i++)
{
if( array[i] < array[end])
{
index++;
Swap(array, index, i);
}
}
Swap(array, index +1, end);
return index + 1;
}
private static void Swap(int[] array, int index1, int index2)
{
var temp = array[index1];
array[index1] = array[index2];
array[index2] = temp;
}
}
}
以上即為快速排序的代碼,這里有兩個重要的方法:
1、Partition:該方法是以數(shù)組的某個元素為參考元素(軸元素或主元素),將數(shù)組劃分成三個區(qū)域:
【<=參考元素】【參考元素】【>=參考元素】
2. DoSort:該方法會調(diào)用Partition將數(shù)組分區(qū),并在新產(chǎn)生的子數(shù)組上遞歸調(diào)用最終達(dá)到有序的目的。
上面給出的代碼是以數(shù)組最后一個元素作為參考元素,這僅是參考元素選取的方式之一。我們也可以隨即選取數(shù)組的元素或者數(shù)組中間的元素作為參考元素。事實上參考元素的選取對快速排序的性能有很大影響。如果每次選取的參考元素能將數(shù)組分成相對均衡的區(qū)域,快速排序?qū)⒊蔀樽羁斓呐判蛩惴?;但在另一種極端情形下,每次分成的數(shù)組都是1和n-1的關(guān)系,快速排序又會變的很慢。具體的性能數(shù)據(jù)后面再來討論研究。
相關(guān)文章
C# WinForm實現(xiàn)窗體上控件自由拖動功能示例
這篇文章主要介紹了C# WinForm實現(xiàn)窗體上控件自由拖動功能,涉及WinForm控件屬性及事件響應(yīng)相關(guān)操作技巧,需要的朋友可以參考下2017-07-07C#操作SQLite數(shù)據(jù)庫方法小結(jié)(創(chuàng)建,連接,插入,查詢,刪除等)
這篇文章主要介紹了C#操作SQLite數(shù)據(jù)庫方法,包括針對SQLite數(shù)據(jù)庫的創(chuàng)建,連接,插入,查詢,刪除等操作,并提供了一個SQLite的封裝類,需要的朋友可以參考下2016-07-07C#調(diào)用RabbitMQ實現(xiàn)消息隊列的示例代碼
這篇文章主要介紹了C#調(diào)用RabbitMQ實現(xiàn)消息隊列的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12