你知道C#排序的編寫及性能嗎?
在進(jìn)行C#排序算法之前,我們先定義一個(gè)100位的隨機(jī)數(shù)列,好進(jìn)行各種排序算法的性能測試。
代碼如下:
/// |
1.冒泡排序 (Bubble Sort)
基礎(chǔ)思想:將相鄰的記錄的關(guān)鍵碼進(jìn)行比較,若前面記錄的關(guān)鍵碼大于后面記錄的關(guān)鍵碼,則將它們交換,否則不交換。
代碼如下:
/// |
2.直接插入排序
基礎(chǔ)思想: 順序的將待排序的記錄安關(guān)鍵碼的大小插入到已排序的記錄子序列的適當(dāng)位置。子序列的記錄個(gè)數(shù)從1開始逐漸增大,當(dāng)子序列記錄個(gè)數(shù)于首先表中的記錄個(gè)數(shù)相同時(shí)排序完畢。
代碼如下:
/// |
3.簡單選擇排序
基礎(chǔ)思想:從待排序的記錄序列中選擇關(guān)鍵碼最小(或)最大的記錄并將它也序列中的第一個(gè)記錄交換位置;然后從不包括第一個(gè)位置上的記錄序列中選擇關(guān)鍵碼最小(或最大)的記錄并將它也序列中的第2個(gè)記錄交換位置,如此重復(fù),直到序列只剩下一個(gè)記錄為止。
代碼如下:
///
/// 簡單選擇排序算法
///
public class SimpleSelectSort : IAction
{
#region IAction 成員
public void Action()
{
int[] array = Program.RandomArray();
int tmp = 0;
int t = 0;
for (int i = 0; i < array.Length; i++)
{
t = i;
for (int j = i + 1; j < array.Length; j++)
{
if (array[t] > array[j])
{
t = j;
}
}
tmp = array[i];
array[i] = array[t];
array[t] = tmp;
}
#endregion
}
4.快速排序
基礎(chǔ)思想:通過不斷比較關(guān)鍵碼,以某咯記錄為界(該記錄成為支點(diǎn)),將待排序列分成兩部分。其中,一小部分滿足所有記錄的關(guān)鍵碼都大于或等于支點(diǎn)記錄為界將待排序列按關(guān)鍵碼中分成兩部分的過程,稱為一次劃分,直到整個(gè)序列按關(guān)鍵碼有序?yàn)橹埂?/P>
代碼如下:
///
/// 快速排序算法
///
public class QuickSort : IAction
{#region IAction 成員
public void Action()
{
int[] array = Program.RandomArray();QuickSortArray(array, 0, array.Length - 1);
}private void QuickSortArray(int[] arr, int low, int high)
{
int i = low;
int j = high;
int tmp = arr[low];
while (low < high)
{
while ((low < high) && arr[high] >= tmp)
{
--high;
}
arr[low] = arr[high];
while ((low < high) && arr[low] <= tmp)
{
++low;
}
arr[high] = arr[low];
--high;
}
arr[low] = tmp;
if (i < low - 1)
{
QuickSortArray(arr, i, low - 1);
}
if (j > low + 1)
{
QuickSortArray(arr, low + 1, j);
}
}#endregion
}
通過上面的描述,我們對(duì)C#幾個(gè)主要的排序算法了解清楚了 接下來開始解析它們其中的奧妙吧。其實(shí)在此之前 我一直都喜歡使用冒泡來排序,不過通過CodeTimer測試了下 結(jié)果如下:
總結(jié):從C#幾個(gè)常用的排序算法中,我們常用的冒泡法消耗的系統(tǒng)時(shí)間是最多了,相比之下快速排序所用的時(shí)間倒是很快速。
希望能和大家一起探討.NET中的神奇,享受編程給我們帶來的樂趣~
【編輯推薦】