冒泡排序 是计算机程序中较为常见和简单的排序算法,它需要重复地走访需要进行排序的元素列,按照一定顺序依次比较两个相邻的元素,如果顺序错误就把他们交换过来。
示意原图如下:
我们需要的结果示意图如下:
那我们应该怎么进行程序的编写才能满足这样的结果呢?
你首先会想到用什么方法来进行排序呢?
此刻。你想想,在军训时候,同排队列中是怎么行按照身高高低来进行站队的?是不是每个人和自己相邻的下一位进行比较?冒泡排序就是利用这种方法,只不过军训站队是可以队列中各个相邻的两个人在同时比较,而冒泡排序一般选择从第一位开始,依次进行比较和排序。
**注意:**以数值从小到大排序为例:是第一位和第二位比较,如果第一位的值 > 第二位的值,则交换,如果不大于,则不交换,这个时候需要比较的位次增加 1,各数值并不变化,第二位和第三位比较,如果第二位的值 > 第三位的值 ,则第二位和第三位交换,如果不大于,则不交换,不管比较与否,需要比较的位次都需要自增 1 ,依次类推直到比较完所有元素(遍历完整个都没有发生交换则证明最后一位的值就是最大的)。
比如对下面这个序列进行从小到大排序:
100 40 130 10 60
第一轮:
1)100 和 40比,100>40,则它们互换位置:
40 100 130 10 60 (第一次发生交换,继续比较)
2)100 和 130 比,100<130,则不用交换位置。
没有发生交换,则需要比较的位数增加 1 ,但各位的值并不交换。
依然是:40 100 130 10 60
3)130 和 10 比,130>10,则它们互换位置:
40 100 10 130 60 (第二次发生交换,实际上是第三次比较(第二次没有交换),继续比较)
4)130 和 60 比,130>60,则它们互换位置:
40 100 10 60 130
到此第一轮就比较完了。第一轮的结果是找到了序列中最大的那个数,并浮到了最右边。
比较时,每轮中第 n 次比较是新序列中第 n 个元素和第 n+1 个元素的比较(假如 n 从 1 开始)。
第二轮:
第一轮比较完状态:40 100 10 60 130
-
40 和 100 比,40<100,则不用交换