冒泡排序详解

原理:将数组元素中相邻两个元素的值进行比较,将较小的数放到前面,每一次交换都将最大的数放到最后,依次交换后最终将数组中的元素从小到大排序。具体如下:

  1.    比较相邻的元素。如果第一个比第二个大,就交换他们两个;
  2.    对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数;
  3.   针对所有的元素重复以上的步骤,除了最后一个;
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

注:数组中相同元素的前后顺序并没有改变,冒泡排序是一种稳定排序算法。

以下是C#实现冒泡排序的过程与代码:

比如数组a中为{1,6,4,3,2},长度为5;

第一轮比较需要比较4(=5-1)次;第二轮比较需要比较3(=5-2)次;第三轮比较需要比较2(=5-3)次;第四轮比较需要比较1(=5-4)次。

因此外层i(表示比较的轮数)的取值为0~a.Length-1,内层j(表示每轮比较的次数)的取值为0~a.Length-i。

但在比较a[j]>a[j+1]时,会存在index(索引)溢出的情况,所以j的取值应为0~a.Length-i-1。 

排序过程
第一轮(i=0)第二轮(i=1)第三轮(i=2)第四轮(i=3)
第一次(j=0)

1,6

1,41,31,3
第二次(j=1)6,44,33,2
第三次(j=2)6,34,2
第四次(j=3)6,2
排序后的结果1,4,3,2,61,3,2,4,61,2,3,4,61,2,3,4,6

class Program
    {
        static void Main(string[] args)
        {
            int temp = 0;
            int[] arr = {23, 44, 66, 76, 98, 11, 3, 9, 7};
            Console.WriteLine("排序前的数组:"); //输出排序前的数组
            foreach (int item in arr) //foreach语句输出数组arr的元素
            {
                Console.Write(item + " "); //不换行输出
            }
            Console.WriteLine();    //换行
            
            for (int i = 0; i < arr.Length - 1; i++) //外层循环代表比较的轮数;
            {
                //内层循环代表每轮比较的次数 
                for (int j = 0; j < arr.Length - i - 1; j++)
                {
                    if (arr[j] > arr[j + 1])
                    {
                        temp = arr[j + 1];
                        arr[j + 1] = arr[j];
                        arr[j] = temp;
                    }
                }
            
            }
            Console.WriteLine("排序后的数组:");
            foreach (int item in arr)
            {
                Console.Write(item+" ");
            }
            Console.WriteLine();
            Console.ReadKey();
        }
    }

如果要对数组中的元素从大到小排序,只需要将 if(a[j]>a[j+1]) 语句更改成 if(a[j]<a[j+1]) 即可。

System.Array 是所有数组的基类,其提供的属性和方法也可以被用到任何数组中。

数组中常用的其他方法:

编号方法描述
1Clear()清空数组中的元素
2Sort()冒泡排序,从小到大排序数组中的元素
3Reverse()将数组中的元素逆序排列(搭配Sort方法可以实现将数组元素从大到小的排序)
4IndexOf()查找数组中是否含有某个元素,返回该元素第一次出现的位置,如果没有与之匹配的元素,则返回 -1
5LastIndexOf()查找数组中是否含有某个元素,返回该元素最后一次出现的位置

上述实现冒泡排序的代码可以简写成:

class Program
    {
        static void Main(string[] args)
        {
            
            int[] arr = {23, 44, 66, 76, 98, 11, 3, 9, 7};

            Console.WriteLine("排序前的数组:"); //输出排序前的数组
            foreach (int item in arr) //foreach语句输出数组arr的元素
            {
                Console.Write(item + " "); //不换行输出
            }
            Console.WriteLine();    //换行
            
            Array.Sort(arr);   //数组提供的Sort方法实现冒泡排序       

            Console.WriteLine("排序后的数组:");
            foreach (int item in arr)
            {
                Console.Write(item+" ");
            }
            Console.WriteLine();
            Console.ReadKey();
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值