zoukankan      html  css  js  c++  java
  • 排序算法——冒泡排序

    冒泡排序是最基本的排序算法,面试或者考试的时候,属于初级的算法问题,遇到的情况也是最多的。面试的时候,此类问题一般只需要表述一下思路即可。网络有关资料也很多,就随便写写。

    例:有数组n={9,8,7,6,5,4,3,2,1},对此数组按照从小到大的顺序进行排序。

    首先进行第一轮的冒泡i=1,冒泡的范围为整个数组的长度length=9

    定义一个下标指向第1个位置j=0,从第一个元素9(n[0])开始,与9后面的元素n(1)进行比较,如大于后一位的元素,则进行交换,结果如下:

    8,9,7,6,5,4,3,2,1

    经过交换后,下标移到第2个位置i=1,下一步从第2个元素n[1]开始,如大于后一个元素n[2],进行交换,结果如下:

    8,7,9,6,5,4,3,2,1

    以此类推,

    j=2时,结果为:8,7,6,9,5,4,3,2,1

    j=3时,结果为:8,7,6,5,9,4,3,2,1

    j=4时,结果为:8,7,6,5,4,9,3,2,1

    j=5时,结果为:8,7,6,5,4,3,9,2,1

    j=6时,结果为:8,7,6,5,4,3,2,9,1

    j=7时,结果为:8,7,6,5,4,3,2,1,9

    当j=7时,9排到了最后一个位置,第一轮的冒泡结束后,集合中最大的数已经到达了最后一位,

    因此下一轮的冒泡将不进行最后一个位置的数字的比较,

    第二轮冒泡i=2,冒泡的范围缩小为除去最后一位的数字length=9-1=8,即j<length-1(j<8-1)

    下标j从第1位开始j=0,比较方式与第一轮相同,同后一位元素进行比较,结果如下:

    7,8,6,5,4,3,2,1,9

    j=1时,结果为,7,6,8,5,4,3,2,1,9

    j=2时,结果为,7,6,5,8,4,3,2,1,9

    j=3时,结果为,7,6,5,4,8,3,2,1,9

    j=4时,结果为,7,6,5,4,3,8,2,1,9

    j=5时,结果为,7,6,5,4,3,2,8,1,9

    j=6时,结果为,7,6,5,4,3,2,1,8,9

    当进行8轮冒泡后,数组就排序完成了,排序过程如下图中列举

    以上的范例列举的是一个交换次数最多的情况,即需要排序的数组完全与结果相反的顺序

    第1轮交换次数8次,第2轮交换次数7次...第8轮交换次数1次,总次数=8+7+6+5+4+3+2+1=36

    长度为n的数组冒泡排序交换次数最大为:(n-1)n/2

    c#代码范例:

    static void Main(string[] args)
            {
                
                int[] score = { 9, 8, 7, 6, 5, 4, 3, 2, 1 };
    
                for (int i = 1; i < score.Length; i++)
                {
                    Console.WriteLine("" + i + "轮冒泡");
                    for (int j = 0; j < score.Length - i; j++)
                    {
                        if (score[j] > score[j + 1])
                        {
                            int temp = score[j];
                            score[j] = score[j + 1];
                            score[j + 1] = temp;
                        }
    
                        Console.Write("j=" + j + "时,结果为:");
                        for (int index = 0; index < score.Length; index++)
                        {
                            Console.Write(score[index] + ",");
                        }
                        Console.WriteLine("");
                    }
                }
                Console.WriteLine();
            }
    View Code
  • 相关阅读:
    Struts2+Hibernate+Spring框架整合实战
    springboot集成log4j2,Spring集成log4j2解决方案整理总结
    在linux上使用less命令查看文件的时候,服务器会提示如下:"catalina.out" may be a binary file. See it anyway?
    Eslint 入门详解教程
    mysql表、视图、索引、函数、触发器相关示例(三)
    Nginx(三) 因user www未设置引发的权限问题
    Nginx(二) nginx.conf配置文件详解
    Nginx(一) Linux详细安装及部署实战
    关于Java中集成mysql(springboot)处理数据创建时间和最后更新时间的总结
    Serializable接口的意义和用法总结
  • 原文地址:https://www.cnblogs.com/stealth7/p/3724337.html
Copyright © 2011-2022 走看看