C# 十大排序算法
using System;
using System.Collections.Generic;
using System.Text;namespace 排序匯總
{class Program{//********************主函數(shù)*****************static void Main(string[] args){Console.WriteLine("請輸入待排序列個數(shù)n");int n = int.Parse(Console.ReadLine());Console.WriteLine("請分別輸入待排序元素");int[] Sqlist = new int[n + 1];for (int i = 1; i < Sqlist.Length; i++) //原排列存儲在一維數(shù)組里,每種算法中下標(biāo)均從1開始{Sqlist[i] = int.Parse(Console.ReadLine());}Console.WriteLine("請選擇排序方法:");Console.WriteLine("1、直接插入排序 2、折半插入排序 3、二路插入排序 4、希爾排序 5、快速插入排序");Console.WriteLine("6、冒泡排序 7、選擇排序 8、堆排序 9、歸并排序 10、基數(shù)排序算法");while (true){Console.WriteLine();int number = int.Parse(Console.ReadLine());Console.WriteLine();if (number == 1) zhijiecharupaixu(Sqlist);if (number == 2) zhebancharu(Sqlist);if (number == 3) erlucharusuanfa(Sqlist);if (number == 4) xierpaixu(Sqlist);if (number == 5) kuaisucharu(Sqlist, n);if (number == 6) maopaopaixu(Sqlist);if (number == 7) xuanzepaixu(Sqlist);if (number == 8) duipaixu(Sqlist);if (number == 9) guibingpaixu(Sqlist);if (number == 10) jishupaixu(Sqlist);Console.WriteLine("該序列從小到大為:");for (int i = 1; i < Sqlist.Length; i++){Console.WriteLine(Sqlist[i]);}} //可循環(huán)選擇輸入}//***********直接插入算法************static void zhijiecharupaixu(int[] Sqlist){Console.WriteLine("***********直接插入算法************");for (int i = 2; i < Sqlist.Length; i++){if (Sqlist[i] < Sqlist[i - 1]){Sqlist[0] = Sqlist[i];Sqlist[i] = Sqlist[i - 1];int j;for (j = i - 2; Sqlist[0] < Sqlist[j]; --j){Sqlist[j + 1] = Sqlist[j];}Sqlist[j + 1] = Sqlist[0];}}}//***********折半插入算法************static void zhebancharu(int[] Sqlist){Console.WriteLine("***********折半插入算法************");for (int i = 2; i < Sqlist.Length; i++){Sqlist[0] = Sqlist[i];int low = 1;int high = i - 1;int m;while (low <= high){m = (low + high) / 2;if (Sqlist[0] < Sqlist[m]) high = m - 1;else low = m + 1;}int j;for (j = i - 1; j >= high + 1; --j) Sqlist[j + 1] = Sqlist[j];Sqlist[j + 1] = Sqlist[0];}}//***********二路插入算法************static void erlucharusuanfa(int[] Sqlist){Console.WriteLine("***********二路插入算法************");int[] Sl = new int[Sqlist.Length];bidir_insert(Sqlist, Sl, Sqlist.Length);}static void bidir_insert(int[] source, int[] dest, int len){int first, last;first = last = 1;dest[1] = source[1];for (int i = 2; i < len; i++){if (dest[last] <= source[i]){dest[++last] = source[i];}else if (dest[first] >= source[i]){first = (first - 1 + len) % len;dest[first] = source[i];}else{for (int index = (last - 1 + len) % len; ; index = (index - 1 + len) % len){if (dest[index] <= source[i]){int mid = last++;while (mid != index){dest[(mid + 1) % len] = dest[mid];mid = (mid - 1 + len) % len;}dest[(index + 1) % len] = source[i];break;}}}}for (int i = 1; i < len; ++i){source[i] = dest[first];first = (first + 1) % len;}}//***********希爾排序算法************static void xierpaixu(int[] Sqlist){Console.WriteLine("***********希爾排序算法************");int[] dlta = new int[5];dlta[0] = 9;for (int j = 1; j < 5; j++){dlta[j] = dlta[j - 1] - 2;}for (int i = 0; i < 5; i++)Shellinsert(Sqlist, dlta[i]);}static void Shellinsert(int[] sqlist, int dk){for (int i = dk + 1; i < sqlist.Length; ++i){if (sqlist[i] < sqlist[i - dk]){sqlist[0] = sqlist[i];int j;for (j = i - dk; j > 0 && sqlist[0] < sqlist[j]; j -= dk){sqlist[j + dk] = sqlist[j];}sqlist[j + dk] = sqlist[0];}}}//***********快速排序算法************static void kuaisucharu(int[] Sqlist, int n){Console.WriteLine("***********快速排序算法************");Qsort(Sqlist, 1, n);}static int Partition(int[] sqlist, int low, int high){sqlist[0] = sqlist[low];int pivotkey = sqlist[low];while (low < high){while (low < high && sqlist[high] >= pivotkey) --high;sqlist[low] = sqlist[high];while (low < high && sqlist[low] <= pivotkey) ++low;sqlist[high] = sqlist[low];}sqlist[low] = sqlist[0];return low;}static void Qsort(int[] sqlist, int low, int high){int pivotkey;if (low < high){pivotkey = Partition(sqlist, low, high);Qsort(sqlist, low, pivotkey - 1);Qsort(sqlist, pivotkey + 1, high);}}//***********冒泡排序算法************static void maopaopaixu(int[] Sqlist){Console.WriteLine("***********冒泡排序算法************");for (int i = 1; i < Sqlist.Length - 1; i++){int m;for (int j = 1; j < Sqlist.Length - i; j++){if (Sqlist[j] > Sqlist[j + 1]){m = Sqlist[j + 1];Sqlist[j + 1] = Sqlist[j];Sqlist[j] = m;}}}}//***********選擇排序算法************static void xuanzepaixu(int[] Sqlist){Console.WriteLine("***********選擇排序算法************");for (int i = 1; i < Sqlist.Length - 1; i++){int min = i;int h;for (int j = i + 1; j < Sqlist.Length; j++){if (Sqlist[j] < Sqlist[min]){min = j;}}h = Sqlist[i];Sqlist[i] = Sqlist[min];Sqlist[min] = h;}}//***********堆排序算法************static void duipaixu(int[] Sqlist){Console.WriteLine("***********堆排序算法************");Heapsort(Sqlist);}static void HeapAdjust(int[] sqlist, int s, int m){int rc = sqlist[s];for (int j = 2 * s; j <= m; j *= 2){if (j < m && sqlist[j] < sqlist[j + 1]) ++j;if (rc >= sqlist[j]) break;sqlist[s] = sqlist[j];s = j;}sqlist[s] = rc;}static void Heapsort(int[] sqlist){int m;for (int i = (sqlist.Length - 1) / 2; i > 0; --i)HeapAdjust(sqlist, i, sqlist.Length - 1);for (int i = sqlist.Length - 1; i > 1; --i){m = sqlist[1];sqlist[1] = sqlist[i];sqlist[i] = m;HeapAdjust(sqlist, 1, i - 1);}}//***********歸并排序算法************static void guibingpaixu(int[] Sqlist){Console.WriteLine("***********歸并排序算法************");Msort(Sqlist, Sqlist, 1, Sqlist.Length - 1);}static void Merge(int[] SR, int[] TR, int i, int m, int n){int j, k;for (j = m + 1, k = i; i <= m && j <= n; ++k){if (SR[i] <= SR[j]) TR[k] = SR[i++];else TR[k] = SR[j++];}if (i <= m){for (; i <= m; i++, k++)TR[k] = SR[i];}if (j <= n){for (; j <= n; j++, k++)TR[k] = SR[j];}}static void Msort(int[] SR, int[] TR1, int s, int t){int[] TR2 = new int[TR1.Length];int m;if (s == t) TR1[s] = SR[s];else{m = (s + t) / 2;Msort(SR, TR2, s, m);Msort(SR, TR2, m + 1, t);Merge(TR2, TR1, s, m, t);}}//***********基數(shù)排序算法************static void jishupaixu(int[] Sqlist){Console.WriteLine("***********基數(shù)排序算法************");int[] res = RadixSort(Sqlist, 5);}public static int[] RadixSort(int[] Array, int digit){for (int k = 1; k <= digit; k++){int[] tmpArray = new int[Array.Length];int[] tmpCount = new int[10] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };for (int i = 0; i < Array.Length; i++){int tmpSp = Array[i] / (int)Math.Pow(10, k - 1) - (Array[i] / (int)Math.Pow(10, k)) * 10;tmpCount[tmpSp] += 1;}for (int m = 1; m < 10; m++){tmpCount[m] += tmpCount[m - 1];}for (int n = Array.Length - 1; n >= 0; n--){int tmpSp = Array[n] / (int)Math.Pow(10, k - 1) - (Array[n] / (int)Math.Pow(10, k)) * 10;tmpArray[tmpCount[tmpSp] - 1] = Array[n];tmpCount[tmpSp] -= 1;}for (int p = 1; p < Array.Length; p++){Array[p] = tmpArray[p];}}return Array;}}
}
轉(zhuǎn)載于:https://www.cnblogs.com/flykarry/p/4179419.html
總結(jié)
- 上一篇: supesite 相关 修改
- 下一篇: php composer使用过程