幾種常見的陣列排序方法

2022-03-04 23:26:31 字數 3146 閱讀 1771

廢話不多說,**如下,基本的解釋也有

using system;

using system.collections.generic;

using system.linq;

using system.text;

namespace suanfa

; sort(ints);

print(ints);

int ints2 = ;

sortmaopao(ints2);

print(ints2);

int ints3 = ;

sortkuaisu(ints3, 1, 7);

print(ints3);

int ints4 = ;

sortcharu(ints4);

print(ints4);

int ints5 = ;

sortxier(ints5);

print(ints5);

int ints6 = ;

print(sortbinggui(ints6));

console.read();

}public static void print(int ints)

console.writeline();

}/// /// 選擇排序

///

///

public static void sort(int arr)

int t = arr[min];

arr[min] = arr[i];

arr[i] = t;}}

/// /// 氣泡排序

///

///

public static void sortmaopao(int arr)

}j++;}}

private static void swap(ref int l, ref int r)

/// /// 快速排序

///

///

/// 起始位置

/// 結束位置

public static void sortkuaisu(int list, int low, int high)

mid = (low + high) >> 1;

pivot = list[mid];

swap(ref list[low], ref list[mid]);

l = low + 1;

r = high;

dowhile (l < r);

list[low] = list[r];

list[r] = pivot;

if (low + 1 < r)

sortkuaisu(list, low, r - 1);

if (r + 1 < high)

sortkuaisu(list, r + 1, high);

}/// /// 插入插敘

///

///

public static void sortcharu(int arr)

arr[j] = t;}}

/// /// 希爾排序

///

///

public static void sortxier(int list)

list[j - 1] = t;}}

}/// /// 歸併排序之歸:歸併排序入口

/// updated by lihua at 05/06/2009

///

/// 無序陣列

/// 有序陣列

/// lihua

static int sortbinggui(int data)

//取陣列中間下標

//int middle = data.length / 2; //方法一:除2取整數

int middle = data.length >> 1; //方法二:位移 (感謝讀者hyper給出的這個效率稍高的方法)

//初始化臨時陣列let,right,並定義result作為最終有序陣列,若陣列元素奇數個,將把多餘的那元素空間預留在right臨時陣列

int left = new int[middle], right = new int[data.length - middle], result = new int[data.length];

//下面這句對效能有些影響,所以在上面有了改進,直接用data.length-middle初始化right陣列

//if (data.length % 2 != 0) right = new int[middle + 1];

//int i = 0, j = 0;

//foreach (int x in data)//開始排序

//// else//填充右陣列

//

//}//上面的foreach被改成了for迴圈

//for (int i = 0; i < data.length; i++)

//// else

//

//}//經調查,用array.copy的確比上面的for迴圈優化很多

array.copy(data, 0, left, 0, middle);//拷貝左陣列

array.copy(data, left.length, right, 0, right.length); //拷貝右陣列

left = sortbinggui(left);//遞迴左陣列

right = sortbinggui(right);//遞迴右陣列

result = merge(left, right);//開始排序

輸出排序,測試用(lihua debug)

return result;

}/// /// 歸併排序之並:排序在這一步

///

/// 左陣列

/// 右陣列

/// 合併左右陣列排序後返回

static int merge(int a, int b)

else//左陣列中元素大於右陣列中元素

}while (i < a.length)//這裡其實是還有左元素,但沒有右元素

while (j < b.length)//右右元素,無左元素

return result;//返回結果陣列}}

}

幾種常見的排序方法。

氣泡排序 氣泡排序是每次都從第乙個元素開始,到最後的k 每迴圈完一次,最後乙個元素位置固定。include include int main void for i 0 i n 1 i k for i 0 i n i return 0 選擇排序 選擇排序每一次迴圈玩從正數的第i個元素位置確定。incl...

幾種常見的排序方法

氣泡排序是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果它們的順序錯誤就把它們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端。以4,2,3,1為例,第一次迴圈4與2比較...

陣列排序常見的幾種演算法

氣泡排序的基本思想就是對比相鄰的元素值,如果滿足條件就交換元素值,把小的放前面,把大的放後面。其演算法由兩層迴圈實現,外層迴圈控制排序次數,一般為排序的陣列的長度減1,內層迴圈主要用於比較相鄰元素的大小,以判斷是否交換位置。內層的對比次數隨著外層排序的次數的增加而減少。如下 public class...