冒泡排序(Bubble Sort)

过程:结合示例更好理解一些。给定[3, 1, 0, 2], 我想将它按照从小到大的顺序排成[0, 1, 2, 3], 我假定一个有序区间[ ],最初是空的,这个有序区间只向一个地方增长,我假定是[ ] {3, 1, 0, 2}, 在这个无序区间的左边,那么这个有序区间每次就得囊括无序区间最小的数字,我们从无序区间的最后面开始,例如2,每次和前面的元素相比较,假如后面的元素比前面的小,我们就把他们交换。

定义i, [0,i)这个为有序,最终为[0, n)这个区间有序,即完成排序任务。j一开始指向无序区间的最后一个元素,每词循环j的范围从n-1,到i, arr[ j ]和arr[ j-1]相比较,依据上述条件来交换。

1. [ ]{3,1,0,2} i=0, [0, 0)为空,j从最后的元素2开始,每次和前面的元素比较, j=3, {0, 2}比较,0<2, 不交换;

2. j–, j=2,2>0;{1, 0},1>0,交换,[ ]{3, 0, 1, 2}

3. j–, j=1, 1>0;{3, 0},3>0交换,[ ]{0, 3, 1, 2}

4. j–,j=0,0==0;本次循环终止,可见最小的元素0被多次交换后被挪到了数组的最前面, i++将其囊括进去[{ 0, ] 3, 1, 2}

5. i=1,再进行第二次循环, 结果为[{ 0, 1,] 3, 2 }

6. i=2,再进行第三次循环, 结果为[{ 0, 1, 2,] 3 }

7. i=3,再进行第三次循环, 结果为[{ 0, 1, 2, 3 }]

8. i=4循环退出, 即完成了冒泡排序。

9. 整个过程让人联想到吐泡泡的过程,这可能也是冒泡排序的又来吧。

你可能感兴趣的:(冒泡排序(Bubble Sort))