zoukankan      html  css  js  c++  java
  • 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 + "	");
    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 + "	");
    49             }
    50 
    51             Console.ReadKey();
    52         }
  • 相关阅读:
    Sprite子节点透明度不能跟随父节点变化的问题求解(转)
    cocos2dx模拟器修改窗口大小
    VS中拒绝在if语句中赋值 (转)
    cocos2dx 开启控制台
    (原创)动态内存管理练习 C++ std::vector<int> 模拟实现
    cocos2dx-lua 圆角矩形 圆角图片 drawNode
    cocos2dx-lua 裁剪ClippingNode,圆形头像,其他形状图片
    cocos2dx-lua 文件操作
    (原创)cocos2dx-lua TableView官方demo分析
    lua table表判断是否为空
  • 原文地址:https://www.cnblogs.com/dyf96966/p/5479391.html
Copyright © 2011-2022 走看看