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         }

 

posted @ 2016-05-10 20:58  想念一段时光  阅读(2511)  评论(0编辑  收藏  举报