冒泡排序
手写的笔记没带上,遇到冒泡排序的用法开始犹豫了想了很久,的确很不方便,于是把它的思路重新详细写下来巩固一下记忆。
冒泡排序的步骤:
- 走访数列,走访时比较相邻两个元素,若元素顺序错误,则需要交换
- N个数的数列,需要走访N-1轮
- 走访一轮后,最大的数会经过交换排在数列的末尾(假设数列按升序排序)
- 下一轮走访,去除末尾最大数,对前面的数进行类似的走访和比较
- 重复走访,直至排序结束
例如
int a[5]={6,5,7,3,4};
int p;
int i;
int temp;
for(p=1;p<5;p++)//一共要走访5-1=4轮
for(i=0;i<5-p;i++)//内存循环走访
if(a[i]>a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
p=1时,进行第一轮走访
内存循环走访 | 比较情况 |
---|---|
i=0 | 比较a[0]和[1] |
i=1 | 比较a[1]和a[2] |
i=2 | 比较a[2]和a[3] |
i=3 | 比较a[3]和a[4] |
i=4 | 内层循环结束 |
p=2时,进行第二轮走访
内存循环走访 | 比较情况 |
---|---|
i=0 | 比较a[0]和[1] |
i=1 | 比较a[1]和a[2] |
i=2 | 比较a[2]和a[3] |
i=3 | 内层循环结束 |
p=3时,进行第三轮走访
内存循环走访 | 比较情况 |
---|---|
i=0 | 比较a[0]和[1] |
i=1 | 比较a[1]和a[2] |
i=2 | 内层循环结束 |
p=4时,进行第四轮走访
内存循环走访 | 比较情况 |
---|---|
i=0 | 比较a[0]和[1] |
i=1 | 内层循环结束 |
p=5时,走访结束,即外层循环结束