排序算法——冒泡排序

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

例:有数组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
原文地址:https://www.cnblogs.com/stealth7/p/3724337.html