廢話不多說,**如下,基本的解釋也有
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...