C#冒泡排序算法
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。
它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。
冒泡排序算法的运作如下:
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
下面以一组数组为例:5,4,3,2,1
排列如下:
第一次:
4,5,3,2,1,
4,3,5,2,1
4,3,2,5,1
4,3,2,1,5 交换4次
第二次:
3,4,2,1,5
3,2,4,1,5
3,2,1,4,5 交换3次
第三次:
2,3,1,4,5
2,1,3,4,5 交换2次
第四次:
1,2,3,4,5 交换1次
由此可见:总计排序4(length-1)次,每次排序交换(length-次数-1)。冒泡排序是C#语言双层循环交换变量的一个事例,通过外层循环控制循环次数,即保证每个元素都进行一次相邻元素的交换,内层循环从第一个元素开始控制相邻元素的比较与交换,最终达到整体的比较。
下面通过C#代码通过接受用户输入的数字进行排序:
1 static void Main(string[] args) 2 { 3 //接收用户输入 4 Console.WriteLine("请输入6个正整数:"); 5 int[] myintArray = new int[6]; 6 for (int i = 0; i < myintArray.Length; i++) 7 { 8 myintArray[i] = int.Parse(Console.ReadLine());//循环输入6个正整数,enter切换 9 } 10 11 //正序排列: 12 for (int i = 0; i < myintArray.Length - 1; i++)//外层循环控制循环次数 13 { 14 for (int j = 0; j < myintArray.Length - i - 1; j++)//内层循环用于交换相邻要素。 15 { 16 int temp; 17 if (myintArray[j] > myintArray[j + 1]) 18 { 19 temp = myintArray[j + 1]; 20 myintArray[j + 1] = myintArray[j]; 21 myintArray[j] = temp; 22 } 23 } 24 } 25 Console.WriteLine("正序序排列为:"); 26 foreach (int outint in myintArray) 27 { 28 Console.Write(+outint + "\t"); 29 } 30 Console.WriteLine(); 31 //倒序排列为: 32 for (int i = 0; i < myintArray.Length - 1; i++) 33 { 34 for (int j = 0; j < myintArray.Length-i - 1; j++) 35 { 36 int temp; 37 if (myintArray[j] < myintArray[j + 1]) 38 { 39 temp = myintArray[j]; 40 myintArray[j] = myintArray[j + 1]; 41 myintArray[j + 1] = temp; 42 } 43 } 44 } 45 Console.WriteLine("倒序排列为:"); 46 foreach (int outint in myintArray) 47 { 48 Console.Write(outint + "\t"); 49 } 50 51 Console.ReadKey(); 52 }