前言
上午上课老师通过两个神似的三角形,讲了冒泡排序和选择排序的区别和联系在哪里,恰好下午看到了这样的一写关于该排序算法的一些资料,想了想还是决定试一试,因为出来混总是要还的。
排序
定义
就是使一串记录,按照其中某个或者某个关键字的大小,递增或递减的排列起来的算法。它应用在大量数据处理方面,一个优秀的算法可以节省大量的资源。
分类
这里浅显的说一下:插入排序、选择排序和冒泡排序。
插入排序(C#版)
<span style="font-family:KaiTi_GB2312;font-size:18px;"> /// <summary> /// 插入排序 /// </summary> /// <param name="arry"></param> public static void InsertSort(this int[] arry) { //直接插入排序是将待比较的数值与它的前一个数值进行比较; //所以外层循环是从第二个数值开始的 for (int i = 1; i < arry.Length; i++) { //如果当前元素小于其前面的元素时 if (arry[i] < arry[i - 1]) { //用一个变量来保存当前比较值,因为当一趟比较完成时,我们要将待比较数值置入 //比它小的数值的后一位; int temp = arry[i]; int j = 0; for (j = i - 1; j >= 0 && temp < arry[j]; j--) { arry[j + 1] = arry[j];//从无序区选出最大的;将最大的赋值; } arry[j + 1] = temp;//将从无序区选出的最大值在有序区排序。 } } }</span>
<span style="font-family:KaiTi_GB2312;font-size:18px;">namespace Test1 { class Program { static void Main(string[] args) { //插入排序 int[] arry = new int[] { 11, 21, 13, 15, 54, 59, 57, 65 }; arry.InsertSort(); for (int i = 0; i < arry.Length; i++) { Console.Write(" " + arry[i]); } Console.Read(); } } }</span>
结果
冒泡(交换)和选择排序(C#版)
冒泡排序
<span style="font-family:KaiTi_GB2312;font-size:18px;"> /// <summary> /// 冒泡(交换)排序 /// </summary> /// <param name="arry">要排序的整数数组</param> public static void Sort(this int[] arry) { for (int i = 0; i < arry.Length; i++) { for (int j = 0; j < arry.Length - 1 - i; j++) { //比较前面两个元素,如果前面的比后面的大,则交换位置; //反之不用交换位置 if (arry [j ]>arry [j +1]) { int temp =arry[j +1];//给一个临时变量来作为容器,达到两个数交换位置; arry [j +1]=arry [j]; arry [j ]=temp ; } } } }</span>
<span style="font-family:KaiTi_GB2312;font-size:18px;">namespace Test1 { class Program { static void Main(string[] args) { //冒泡(交换)排序 int[] arry = new int[] { 6, 5, 2, 4, 9, 8, 3, 1 }; arry.Sort(); for (int i = 0; i < arry.Length; i++) { Console.Write(" " + arry[i]); } Console.Read(); } } }</span>结果
选择排序
<span style="font-family:KaiTi_GB2312;font-size:18px;"> /// <summary> /// 选择排序 /// </summary> /// <param name="arry">待排序的整数数组</param> public static void SelectSort(this int[] arry) { int temp = 0; for (int i = 0; i < arry.Length; i++) { for (int j = i + 1; j < arry.Length; j++) { if (arry[i ] > arry[j]) { temp = arry[i]; arry[i] = arry[j ]; arry[j ] = temp; } } } }</span>
<span style="font-family:KaiTi_GB2312;font-size:18px;">namespace Test1 { class Program { static void Main(string[] args) { //选择排序 int[] arry = new int[] { 33, 45, 65, 15, 20, 74, 66, 88 }; arry.SelectSort(); for (int i = 0; i < arry.Length; i++) { Console.Write(" " + arry[i]); } Console.Read(); } } }</span>结果
每一个排序算法,都有其独特之处,现在我只是出于了解之处,希望在以后有机会多多实践。
小结
1、一张图胜过千言万语,米老师的思想真的很棒。
2、有些东西仅仅知道是不够的,还要学会使用。