閱讀507 返回首頁    go 阿裏雲 go 技術社區[雲棲]


C#實現經典排序算法

1、選擇排序

//選擇排序 class SelectionSorter { private int min; public void Sort(int[] arr) { for (int i = 0; i < arr.Length - 1; ++i) { min = i; for (int j = i + 1; j < arr.Length; ++j) { if (arr[j] < arr[min]) min = j; } int t = arr[min]; arr[min] = arr[i]; arr[i] = t; } } static void Main(string[] args) { int[] array = new int[] { 1, 5, 3, 6, 10, 55, 9, 2, 87, 12, 34, 75, 33, 47 }; SelectionSorter s = new SelectionSorter(); s.Sort(array); foreach (int m in array) Console.WriteLine("{0}", m); } }

2、冒泡排序

//冒泡排序 class EbullitionSorter { public void Sort(int[] arr) { int i, j, temp; bool done = false; j = 1; while ((j < arr.Length) && (!done))//判斷長度 { done = true; for (i = 0; i < arr.Length - j; i++) { if (arr[i] > arr[i + 1]) { done = false; temp = arr[i]; arr[i] = arr[i + 1];//交換數據 arr[i + 1] = temp; } } j++; } } static void Main(string[] args) { int[] array = new int[] { 1, 5, 3, 6, 10, 55, 9, 2, 87, 12, 34, 75, 33, 47 }; EbullitionSorter e = new EbullitionSorter (); e.Sort(array); foreach (int m in array) Console.WriteLine("{0}", m); } }

3、快速排序

//快速排序 class QuickSorter { private void swap(ref int l, ref int r) { int temp; temp = l; l = r; r = temp; } public void Sort(int[] list, int low, int high) { int pivot;//存儲分支點 int l, r; int mid; if (high <= low) return; else if (high == low + 1) { if (list[low] > list[high]) swap(ref list[low], ref list[high]); return; } mid = (low + high) >> 1; pivot = list[mid]; swap(ref list[low], ref list[mid]); l = low + 1; r = high; do { while (l <= r && list[l] < pivot) l++; while (list[r] >= pivot) r--; if (l < r) swap(ref list[l], ref list[r]); } while (l < r); list[low] = list[r]; list[r] = pivot; if (low + 1 < r) Sort(list, low, r - 1); if (r + 1 < high) Sort(list, r + 1, high); } static void Main(string[] args) { int[] iArrary = new int[] { 1, 5, 3, 6, 10, 55, 9, 2, 87, 12, 34, 75, 33, 47 }; QuickSorter q = new QuickSorter(); q.Sort(iArrary, 0, 13); for (int m = 0; m <= 13; m++) Console.WriteLine("{0}", iArrary[m]); } }

4、插入排序

//插入排序 public class InsertionSorter { public void Sort(int[] arr) { for (int i = 1; i < arr.Length; i++) { int t = arr[i]; int j = i; while ((j > 0) && (arr[j - 1] > t)) { arr[j] = arr[j - 1];//交換順序 --j; } arr[j] = t; } } static void Main(string[] args) { int[] array = new int[] { 1, 5, 3, 6, 10, 55, 9, 2, 87, 12, 34, 75, 33, 47 }; InsertionSorter i = new InsertionSorter(); i.Sort(array); foreach (int m in array) Console.WriteLine("{0}", m); } }

5、希爾排序

//希爾排序 public class ShellSorter { public void Sort(int[] arr) { int inc; for (inc = 1; inc <= arr.Length / 9; inc = 3 * inc + 1) ; for (; inc > 0; inc /= 3) { for (int i = inc + 1; i <= arr.Length; i += inc) { int t = arr[i - 1]; int j = i; while ((j > inc) && (arr[j - inc - 1] > t)) { arr[j - 1] = arr[j - inc - 1];//交換數據 j -= inc; } arr[j - 1] = t; } } } static void Main(string[] args) { int[] array = new int[] { 1, 5, 3, 6, 10, 55, 9, 2, 87, 12, 34, 75, 33, 47 }; ShellSorter s = new ShellSorter(); s.Sort(array); foreach (int m in array) Console.WriteLine("{0}", m); } }

轉載:https://blog.csdn.net/gisfarmer/archive/2009/05/05/4152345.aspx

最後更新:2017-04-02 04:00:23

  上一篇:go asp.net跳轉頁麵的三種方法比較(轉)
  下一篇:go “不死鳥”號曆險記---和掃雷過不去篇(無厘頭版)