快速排序
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _01_快速排序 { class Program { static void Main(string[] args) { int[] data = { 123, 654, 21, 40, 4, 32, 7, 57, 575, 49, 16, 549, 648, 52, 49, 21, 897, 21, 1 }; QuickSort(data); foreach (int i in data) { Console.Write(i.ToString() + "\t"); } Console.ReadKey(); } static void QuickSort<T>(T[] data) where T : IComparable { if (data == null) { return; } QuickSortCore(data, 0, data.Length - 1); } static void QuickSortCore<T>(T[] data, int beginIndex, int endIndex) where T : IComparable { if (beginIndex < endIndex) { int begin = beginIndex; int end = endIndex; T baseT = data[begin]; while (begin < end) { while (begin < end && baseT.CompareTo(data[end]) <= 0) { end--; } if (begin < end) { data[begin++] = data[end]; } while (begin < end && baseT.CompareTo(data[begin]) > 0) { begin++; } if (begin < end) { data[end--] = data[begin]; } } data[begin] = baseT; QuickSortCore(data, beginIndex, begin - 1); QuickSortCore(data, begin + 1, endIndex); } } } }
归并排序
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _02_归并排序 { class Program { static void Main(string[] args) { int[] array = { 31, 4, 691, 674, 16, 165, 16, 14, 1, 3, 45, 849, 68, 64, 645, 79, 17 }; MergeSort(array); foreach (int n in array) { Console.WriteLine(n); } Console.ReadKey(); } private static void MergeSort<T>(T[] data) where T : IComparable { if (data == null) { return; } T[] temp = new T[data.Length]; MergeSortCore(data, 0, data.Length - 1, temp); } static void MergeSortCore<T>(T[] data, int beginIndex, int endIndex, T[] temp) where T : IComparable { if (beginIndex < endIndex) { int mid = (beginIndex + endIndex) / 2; MergeSortCore(data, beginIndex, mid, temp); MergeSortCore(data, mid + 1, endIndex, temp); MergeArray(data, beginIndex, mid, endIndex, temp); } } static void MergeArray<T>(T[] data, int beginIndex, int midIndex, int endIndex, T[] temp) where T:IComparable { int i = beginIndex, j = midIndex + 1; int m = midIndex, n = endIndex; int index = 0; while (i <= m && j <= n) { temp[index++] = data[i].CompareTo(data[j]) < 0 ? data[i++] : data[j++]; } while (i <= m) { temp[index++] = data[i++]; } while (j <= n) { temp[index++] = data[j++]; } for (i = 0; i < index; i++) { data[beginIndex + i] = temp[i]; } } } }
插入排序
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _03_插入排序 { class Program { static void Main(string[] args) { int[] array = { 31, 4, 691, 674, 16, 165, 16, 14, 1, 3, 45, 849, 68, 64, 645, 79, 17 }; InsertSort(null); foreach (int n in array) { Console.WriteLine(n); } Console.ReadKey(); } static void InsertSort<T>(T[] data) where T:IComparable { if (data == null) { return; } for (int i = 1; i < data.Length; i++) { T tempT = data[i]; int j = i - 1; while (j >= 0 && data[j].CompareTo(tempT) > 0) { data[j + 1] = data[j]; j--; } data[j + 1] = tempT; } } } }
冒泡排序
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _04_冒泡排序 { class Program { static void Main(string[] args) { int[] array = { 31, 4, 691, 674, 16, 165, 16, 14, 1, 3, 45, 849, 68, 64, 645, 79, 17 }; BubbleSort(array); foreach (int n in array) { Console.WriteLine(n); } Console.ReadKey(); } static void BubbleSort<T>(T[] data) where T : IComparable { if (data == null) { return; } for (int i = 0; i < data.Length - 1; i++) { for (int j = 0; j < data.Length - i - 1; j++) { if (data[j].CompareTo(data[j + 1]) > 0) { T temp = data[j]; data[j] = data[j + 1]; data[j + 1] = temp; } } } } } }
堆排序
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _05_堆排序 { class Program { static void Main(string[] args) { int[] data = { 123, 654, 21, 40, 4, 32, 7, 57, 575, 49, 16, 549, 648, 52, 49, 21, 897, 21, 1 }; HeapSort(data); foreach (int i in data) { Console.Write(i.ToString() + "\t"); } Console.ReadKey(); } static void HeapSort<T>(T[] data) where T : IComparable { if (data == null) { return; } for (int i = data.Length / 2 - 1; i >= 0; i--) { AdjastHeap(data, i, data.Length); } for (int i = data.Length - 1; i > 0; i--) { T tempT = data[i]; data[i] = data[0]; data[0] = tempT; AdjastHeap(data, 0, i); } } static void AdjastHeap<T>(T[] data, int index, int length) where T : IComparable { T tempT = data[index]; for (int i = index * 2 + 1; i < length; i = i * 2 + 1) { if (i + 1 < length && data[i + 1].CompareTo(data[i]) > 0) { i++; } if (tempT.CompareTo(data[i]) < 0) { data[index] = data[i]; index = i; } else { break; } } data[index] = tempT; } } }
希尔排序
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _06_希尔排序 { class Program { static void Main(string[] args) { int[] data = { 123, 654, 21, 40, 4, 32, 7, 57, 575, 49, 16, 549, 648, 52, 49, 21, 897, 21, 1 }; SeeleSort(data); foreach (int i in data) { Console.Write(i.ToString() + "\t"); } Console.ReadKey(); } static void SeeleSort<T>(T[] data) where T : IComparable { int length = data.Length; for (int h = length / 2; h > 0; h = h / 2) { for (int i = h; i < length; i++) { T temp = data[i]; if (temp.CompareTo(data[i - h]) < 0) { for (int j = 0; j < i; j += h) { if (temp.CompareTo(data[j]) < 0) { temp = data[j]; data[j] = data[i]; data[i] = temp; } } } } } } } }
1 comment
👿 把这些记下来还是有点用的