冒泡排序
这个系列是回顾之前所学,是用python商量着完成的。
路过的大佬就当看个乐,实现算法的方式不一,也有讨巧的做法。
我只讲讲我的思路,希望大家浏览的时候能多多提建议,共同学习共同进步。
--------------------------------------------------------------------------------------------------------
先举个例子:
[5, 4, 3, 2, 1] 用冒泡排序实现
第一次排序:[4, 3, 2, 1, 5]
第二次排序:[3, 2, 1, 4, 5]
第二次排序:[2, 1, 3, 4, 5]
第四次排序:[1, 2, 3, 4, 5]
刚开始指针指向 ‘5’,依次与后面的四个元素作比较,小就交换,大就不动了,然后将指针向前移一位指向第二个元素继续前面的步骤,当执行到第四次,就不用排序了。
怎么说?
这时的第一个数不用想,肯定是最小的,那就是说一共有五个元素,排序次数为4次,在此基础上抽象一点就是:有n个元素,排序次数就是n-1次
根据上面的思路,我们用python代码结合迭代尝试实现:
1 def bubble_sort(list): 2 for i in range(0, len(list)-1): 3 flag = 0 4 for j in range(0, len(list)-1-i): 5 if list[j] > list[j+1]: 6 list[j+1], list[j] = list[j], list[j+1] 7 flag += 1 8 if flag == 0: 9 return list 10 11 return list
第一个循环是执行排序次数是多少,应该为n-1次
第二个循环是数组中内部元素之间的比较,每次排好序列的元素就不需要再去动它了,所以每次排序完成之后只需要在剩下的元素中排序就行了
这里做了一点点优化,当传入的数组已经是降序序列时,不会执行第二个循环的内容,则flag为0,直接输出结果,将flag放入循环内部是每次调用都会重新初始化flag,不会出现累加的情况。
那么下个快速排序再见。