开发者学堂课程【Go 语言核心编程 - 基础语法、数组、切片、Map :冒泡排序思路分析】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/625/detail/9646
冒泡排序思路分析
内容介绍
一、冒泡排序思路分析
二、总结
一、冒泡排序思路分析
冒泡的算法(规则):
首先有一个数组 arr=[24,69,80,57,13],规则就是让前面的数和后面的数进行比较,如果前面的数大,则交换。而所谓冒泡就是把最大的数放到最后,第二个最大的数放在倒数第二个的位置,然后以此类推,所以第一轮的外层排序为:
第一轮的排序【外层】
第1次是24和69比较,如果前面的数大,则交换。而24小于69,所以顺序不变,顺序为,
第1次比较: [24,69,80,57,13]
第2次69和80比较,69小于80,所以顺序仍然不变,顺序为,
第2次比较: [24,69,80,57,13]
第3次80和57比较,后面的57小于前面的80,所以顺序要做交换,顺序为,
第3次比较: [24,69, 57,80, 13]
第4次80和13比较,后面的13小于前面的80,所以顺序要做交换,顺序为,
第4次比较: [24,69, 57,13,80]
此时80后面已经没有数值,就没有必要进行挪动了。所以经过第一轮比较最大值为80已经确定。第一轮比较后进行第二轮比较,又要从最前面开始比较。
第二轮的排序【外层】
第1次进行24和69的比较,24小于69,所以没有进行位置改变,顺序为,
第1次比较: [24,69,57,13,80]
第2次进行69和57的比较,57小于69,所以要进行位置交换,顺序为,
第2次比较: [24,57,69,13,80]
然后进行第3次比较,69比13大,所以进行位置交换,顺序为,
第3次比较: [24,57,13,69,80]
此时不会再2进行第4次比较,因为刚刚已经确定80是最大值,没有必要比较,所以第二轮比较进行3次就把第二个大值求出来了。然后进行第三轮比较,第三轮比较是建立在第二轮基础之上的所以又回到最前面。
第三轮的排序【外层】
第1次进行24和57的比较,24小于57,不进行位置改变,顺序为,
第1次比较: [24,57,13,69,80]
第2次进行57和13的比较,13小于57,所以要进行位置交换,顺序为,
第2次比较: [24, 13,57, 69,80]
第3次比较57和69的比较,但是没有必要,比较后位置也不会发生变化,这里确定了第三个值。然后进行第四轮的比较。第四轮比较建立在第三轮之上,所以回到首位置。
第四轮的排序【外层】
第1次进行24和13的比较,13小于24,要进行位置交换,顺序为,
第1次比较: [13,24, 57, 69,80]
此时24没必要和后面继续比较下去,所以没有第五轮比较。这时可以发现五个数据进行四轮比较,而且每一轮比较次数在逐渐减小。
二、总结
冒泡排序的规则总结
1、一共会经过数组长度 arr.length-1次的轮数比较,每一轮将会确定一个数的位置。
2、每一轮的比较次数在逐渐的减少,像这个例子第一轮是4次,第二轮是3次,第三轮是2次,第四轮是1次。
3、当发现前面一个数比后面一个数大的时候,就进行了交换。
如果直接总结出规律不描述流程的话思路不是很清晰,所以当遇到比较复杂的问题的时候可以把这个问题适当的写出来,就会很形象了。
接下来进行代码编写:
代码要求:
1先完成能够将最大的数,放到最后。
2.把第二大的数放在倒数第二个位置。
以此类推会发现一个规律,找到规律后编写代码为多重循环的形式。计算机的思维往往和人是反的,所以这里应该是先写里层循环再写外层循环。