“冒泡排序”详解。以C#举例。

        冒泡排序

 
 定义:   他重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
 
原理:
  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素做同样的工作,从开始第一对结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  3. 针对所有的元素重复以上步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,知道没有任何一对数字需要比较。
 
 

算法稳定性:

         冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,是不会再交换的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序 算法。

 

:        

“举例”转载于这里。https://www.cnblogs.com/bigdata-stone/p/10464243.html

(1)要排序数组: [10,1,35,61,89,36,55]
 
(2)第一趟排序
      第一次排序:10和1比较,10大于1,交换位置       [1,10,35,61,89,36,55]
      第二趟排序:10和35比较,10小于35,不交换位置  [1,10,35,61,89,36,55]
      第三趟排序:35和61比较,35小于61,不交换位置  [1,10,35,61,89,36,55]
      第四趟排序:61和89比较,61小于89,不交换位置  [1,10,35,61,89,36,55]
        第五趟排序:89和36比较,89大于36,交换位置   [1,10,35,61,36,89,55]
      第六趟排序:89和55比较,89大于55,交换位置   [1,10,35,61,36,55,89]
      第一趟总共进行了六次比较,排序结果:                    [1,10,35,61,36,55,89]
 
(3)第二趟排序
      第一次排序:1和10比较,1小于10,不交换位置  1,10,35,61,36,55,89
      第二次排序:10和35比较,10小于35,不交换位置    1,10,35,61,36,55,89
      第三次排序:35和61比较,35小于61,不交换位置     1,10,35,61,36,55,89
      第四次排序:61和36比较,61大于36,交换位置   1,10,35,36,61,55,89
      第五次排序:61和55比较,61大于55,交换位置   1,10,35,36,55,61,89
      第二趟总共进行了5次比较,排序结果:1,10,35,36,55,61,89
(4)第三趟排序
      1和10比较,1小于10,不交换位置  1,10,35,36,55,61,89
      第二次排序:10和35比较,10小于35,不交换位置    1,10,35,36,55,61,89
      第三次排序:35和36比较,35小于36,不交换位置     1,10,35,36,55,61,89
      第四次排序:36和61比较,36小于61,不交换位置   1,10,35,36,55,61,89
      第三趟总共进行了4次比较,排序结果:1,10,35,36,55,61,89
      到目前位置已经为有序的情形了。
 

eg:代码示例(这是博主自己的)

using System;


namespace stars
{
    class Program
    {
        static void Main()
        {
            int t= 0;
            int[] arr = { 5, 4, 6, 9, 10, 3, 1, 7 ,2 ,8 };
         
            Console.WriteLine("排序之前的数组:");
            foreach (int item in arr)
            {
                Console.Write(item + "");
            }
            Console.WriteLine();
 
            for (int i = 0; i < arr.Length - 1; i++)
            {
           
                for (int j = 0; j < arr.Length - 1 - i; j++)
                {
                    if (arr[j] > arr[j + 1])
                    {
                        t = arr[j + 1];
                        arr[j + 1] = arr[j];
                        arr[j] = t;
                    }
                }
           
            }
            Console.WriteLine("排序之后的数组:");
            foreach (int item in arr)
            {
                Console.Write(item + "");
            }
            Console.WriteLine();
            Console.ReadKey();
        }
    }
}
   


 

  
//运行结果:

排序之前的数组:
54691031728
排序之后的数组:
12345678910

 

 
 
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值