c#实现所有经典排序算法
//选择排序 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); } } //冒泡排序 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); } } //快速排序 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]); } } //插入排序 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); } } //希尔排序 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); } }