点击蓝字
关注我们
导语
算法博大精深,却又让人秃头。今天用c#(c sharp 别念c井)语言来为大家介绍一下实现顺序排序的底层方法,即更多地用算法而不是.sort等函数来实现顺序排列。c#与c++很相似,所以有c++语言基础的人对于下面的代码也很好理解。废话不多说了,开工……
Q1
1.冒泡排序法:
冒泡排序法的实现过程就是让数组中的每一个元素与后一个元素进行比较,如果符合顺序(因为你可能想升序或降序)就不变,如果不符合顺序就交换;首先从第一个数遍历到最后一个数(即进行i++操作实现上述相邻元素比较),这时最后一个数就是最大(小)的了,然后再循环从第一个数走到倒数第二个数,这样就可以把第二的最大(小)的数放在倒数第二位了。如此循环,直至到达最首位不能循环为止。当然也可以从尾部开始走到首位。下面来看代码吧!(向左滑动查看)
using System;using System.Net.Http.Headers;namespace first{ class Program { //在主函数中实现数组升序排列 static void Main(string[] args) { //定义一维数组,并赋值 int[] arr = new int[] { 3, 9, 27, 6, 18, 12, 21, 15 }; //循环遍历定义的一维数组并输出其中的元素 foreach(int m in arr) Console.WriteLine(m+ " "); Console.WriteLine(); //定义两个int类型的变量,分别用来表示数组下标和储存新的数组元素 int j, temp; //根据下标遍历数组元素 for (int i = 0; i < arr.Length - 1; i++) { j = i + 1; //定义一个标识,以便从这里开始执行(goto) id: if (arr[i] > arr[j]) { //交换元素 temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; goto id; } else { if (j < arr.Length - 1) { j++; goto id; } } } //遍历排序后的数组并输出。 foreach (int n in arr) Console.WriteLine(n + " "); Console.WriteLine(); } }}
Q2
插入排序法:
插入排序法:(为了讲述方便,这里以升序为例)也是比较相邻的两个元素,但与冒泡排序不同的是,如果前后相邻的元素不符合顺序,就将前面大的数抛到这组数的最后面,而其他它后面的元素均前移一位。进行一次以后再向后进行比较,这样可以保证前面的数不断实现顺序化。下面请看代码
using System;using System.Net.Http.Headers;namespace first{ class Program { static void Main(string[] args) { int[] arr = new int[] { 3, 9, 27, 6, 18, 12, 21, 15 }; foreach(int m in arr) Console.WriteLine(m+ " "); Console.WriteLine(); for (int i = 0; i < 8; ++i) { int temp = arr[i]; int j = i; while ((j > 0) && (arr[j - 1] > temp)){ arr[j] = arr[j - 1]; --j; } arr[j] = temp; } Console.WriteLine("排序后的结果为"); foreach (int n in arr) Console.WriteLine(n + " "); Console.WriteLine(); } }}
Q3
选择排序法:
选择排序法较好理解,即让第一个数与后面所以的数一一比较。以升序为例,若后面的某一个数比第一个数还小,就交换它们。经过一轮比较,那么第一个数就是最小的了,再不动第一个数了,从第二个数开始重复上面的操作。这样也可以保证实现升序。来看c#代码吧!
using System;using System.Net.Http.Headers;namespace first{ class Program { //在主函数中实现数组升序排列 static void Main(string[] args) { int[] arr = new int[] { 3, 9, 27, 6, 18, 12, 21, 15 }; foreach(int m in arr) Console.WriteLine(m+ " "); Console.WriteLine(); int min; 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; } Console.WriteLine("排序后的结果为"); foreach (int n in arr) Console.WriteLine(n + " "); Console.WriteLine(); } }}
尽管c#中有sort函数及reverse函数,但熟练掌握算法却可以帮我们深入地理解程序底层的实现过程。以上三种排序方法都应尝试理解与掌握。其实大家也可以发现c#语言与c++是很相似的。所以希望大家不要拘泥于语言,因为算法是互通的。算法可以说是编程的通用语言!!!
声明:图片均来自网络,解释不清楚的地方还请见谅,请以代码为准。
今天就这么多了,谢谢观看
赞
+在看
。
最后送大家一首歌
。
扫码关注我们
微信号|赤子孤独
哔哩哔哩|赤子孤独