1) 冒泡排序法
例如 数组 3,9,27,6,18,12,21,15
第一轮:
排序选择第一位数作为比较对象,依次比较后面的数,如果比3小就交换
3,9,27,6,18,12,21,15
3,9,27,6,18,12,21,15
3,9,27,6,18,12,21,15
3,9,27,6,18,12,21,15
3,9,27,6,18,12,21,15
3,9,27,6,18,12,21,15
3,9,27,6,18,12,21,15
第二轮:选择第二位数作为比较对象,依次和后面的数比较
3,9,27,6,18,12,21,15
3,9,27,6,18,12,21,15
3,6,27,9,18,12,21,15 9比6大则交换
3,6,27,9,18,12,21,15
3,6,27,9,18,12,21,15
3,6,27,9,18,12,21,15
3,6,27,9,18,12,21,15
第三轮:选择第三位数作为比较对象,依次和后面的数比较
3,6,27,9,18,12,21,15 27比9大则交换
3,6,9,27,18,12,21,15
3,6,9,27,18,12,21,15
3,6,9,27,18,12,21,15
3,6,9,27,18,12,21,15
3,6,9,27,18,12,21,15
第四轮:选择第四位数作为比较对象,依次和后面的数比较
3,6,9,27,18,12,21,15 27比18大则交换
3,6,9,18,27,12,21,15 18比12大则交换
3,6,9,12,27,18,21,15
3,6,9,12,27,18,21,15
第五轮:选择第五位数作为比较对象,依次和后面的数比较
3,6,9,12,27,18,21,15 27比18大则交换
3,6,9,12,18,27,21,15
3,6,9,12,18,27,21,15 18比15大则交换
3,6,9,12,15,27,21,18
第六轮:选择第六位数作为比较对象,依次和后面的数比较
3,6,9,12,15,27,21,18 27比21大则交换、
3,6,9,12,15,21,27,18 21比18大则交换
3,6,9,12,15,18,27,21
第七轮:选择第七位数作为比较对象,依次和后面的数比较
3,6,9,12,15,18,27,21 27比21大则交换
3,6,9,12,15,18,21,27
以下是代码:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace Research 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 int[] arr = new int[] { 3, 9, 27, 6, 18, 12, 21, 15 }; //定义一个一维数组,并赋值 14 foreach(int m in arr) //循环遍历定义的一维数组,并输出其中的元素 15 Console.Write(m + " "); 16 Console.WriteLine(); 17 int j, temp; //定义两个int类型的变量,分别用来表示数组下表和存储新的数组元素 18 for(int i=0;i<arr.Length-1;i++) //根据数据下标的值遍历数组元素 19 { j = i + 1; 20 id: //定义一个标识,以便从这里开始执行语句 21 if (arr[i] > arr[j]) //判断前后两个数的大小 22 { 23 temp = arr[i]; //将比较后大的元素赋值给定义的int变量 24 arr[i] = arr[j]; //将后一个元素的值赋值给前一个元素 25 arr[j] = temp; //将int变量中存储的元素值赋值给后一个元素 26 goto id; //返回标识,继续判断后面的元素 27 } 28 else 29 if(j<arr.Length-1) //判断是否执行到最后一个元素 30 { 31 j++; //如果没有,则再往后判断 32 goto id; //返回标识,继续判断后面的元素 33 } 34 } 35 foreach (int n in arr) //循环遍历排序后的数组元素并输出 36 Console.Write(n + " "); 37 Console.WriteLine(); 38 Console.ReadLine(); 39 40 41 42 } 43 } 44 }
2) 插入排序法
例如 数组 3,9,27,6,18,12,21,15
从第二位开始拿出数字插入前面排好的位置上
3,9,27,6,18,12,21,15
3,9,27,6,18,12,21,15
3,6,9,27,18,12,21,15
3,6,9,18,27,12,21,15
3,6,9,18,27,12,21,15
3,6,9,12,18,27,21,15
3,6,9,12,15,18,21,27
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace Research 8 { 9 class Program 10 { 11 12 static void Main(string[] args) 13 { 44 int[] arr = new int[] { 3, 9, 27, 6, 18, 12, 21, 15 }; //定义一个一维数组,并赋值 45 foreach (int n in arr) //循环遍历定义的一维数组,并输出其中的元素 46 Console.Write("{0}", n + " "); 47 Console.WriteLine(); 48 for (int i = 0; i < arr.Length; ++i) //循环访问数组中的元素 49 { 50 int temp = arr[i]; //定义一个int变量,并使用获得的数组元素值赋值 51 int j = i; 52 while ((j > 0) && (arr[j - 1] > temp)) //判断数组中的元素是否大于获得的值 53 { 54 arr[j] = arr[j - 1]; //如果是,则将后一个元素的值提前 55 --j; 56 } 57 arr[j] = temp; //最后将int变量存储的值赋值给最后一个元素 58 } 59 Console.WriteLine("排序后结果为:"); 60 foreach (int n in arr) //循环访问排序后的数组元素并输出 61 Console.Write("{0}", n + " "); 62 Console.WriteLine(); 63 Console.ReadLine(); 64 #endregion 65 66 67 68 } 69 } 70 }
3) 选择排序
例如 数组 3,9,27,6,18,12,21,15
选择一个第一个数作为比较数,依次和后面的数比较,找出后面比它小者交换
3,9,27,6,18,12,21,15
3,9,27,6,18,12,21,15
3,6,27,9,18,12,21,15
3,6,9,27,18,12,21,15
3,6,9,12,18,27,21,15
3,6,9,12,15,27,21,18
3,6,9,12,15,18,21,27
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Research { class Program { static void Main(string[] args) { int[] arr = new int[] { 3, 9, 27, 6, 18, 12, 21, 15 }; //定义一个一维数组,并赋值 foreach (int n in arr) //循环遍历定义一维数组,并输出其中的元素 Console.Write("{0}", n + " "); Console.WriteLine(); int min; //定义一个int变量,用来存储数组下标 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]; //定义一个int变量,用来存储比较大的数组元素值 arr[min] = arr[i]; //将小的数组元素值移动到前一位 arr[i] = t; //将int变量中存储的较大的数组元素值向后移 } Console.WriteLine("排序后结果为:"); foreach (int n in arr) //循环访问排序后的数组元素并输出 Console.Write("{0}", n + " "); Console.WriteLine(); Console.ReadLine(); } } }