第三周
- 冒泡排序
- 算法:
- 第一次冒泡:
- 第二次冒泡:
- 总结:
- 代码:
冒泡排序
见名如闻其意,就像鱼儿吐泡泡,将大的数向上(后)冒泡泡。
算法:
将泡泡向后冒的这个过程是一个重复的过程,必然用到for,所以这个经典算法主要在循环次数上做出改变,用循环去模仿冒泡泡的过程,完成对数组的排序:
算法模仿:
第一次冒泡:
通过这几张图片可以清晰的看出第一次冒泡泡成功的把真个数组中最大的数字9翻到了最后,而比较过程可以看出是两数之间的比较和交换,到代码的体现就是:
//两数比较大小,将大的数放在后面
if(a[j]>a[j+1]){
int temp = a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
第二次冒泡:
这是第一次冒泡结束后的数组:黄色表示已经完成排序的部分。
开始冒泡:
第二次冒泡成果:
第二次冒泡就不需要对对一次冒泡的那个9运算了。
总结:
通过两次冒泡的演示,这个过程我们可以了解的很清晰,那说说这个排序的优点:每完成一次冒泡,下一次的工作量就减少1,他优化的是时间复杂度,并且没有增加空间复杂度。
代码:
int a [] = {3,9,4,5,1,2};
for(int i = 0;i<a.length-1;i++){
for(int j=0;j<a.length-i-1;j++){
if(a[j]>a[j+1]){
int temp = a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}