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
  • 相关阅读:
    SpringBoot整合Elasticsearch
    Elasticsearch环境搭建和介绍(Windows)
    Java并发AtomicBoolean类的使用
    RequestMapping详细用法
    RSA公钥加密 私钥解密
    java随机生成RSA密钥对
    java通过实体类生成数据库表 并生成注释
    设计模式-策略模式
    设计模式-模板方法模式使用
    设计模式-模板方法模式
  • 原文地址:https://www.cnblogs.com/stealth7/p/3724337.html
Copyright © 2011-2022 走看看