逐语句看清冒泡排序
#include<stdio.h>
int main(){
int i;
int j;
int tmp;
int a[] ={1,6,3,9,7,4};//要给此数组的元素排序
for(i=0; i<6; i++)//控制5轮循环,打印a[i],每一次外循环,内循环都要重新循环5次
{
for(j=1; j<=5; j++)//当每一次外循环时,内循环要进行5轮两数比较
{
if(a[j] < a[j-1])
{
tmp = a[j];
a[j] = a[j-1];
a[j-1] = tmp;
}
}
printf(" a[%d]=%d",i,a[i]);
printf("\n");
}
}
过程:
初始化 | i; | j; | {1,6,3,9,7,4} | |||
第1轮外循环 | 内循环要进行5次 | 两两比较进行5次 | 判断是否成立 | 排序 | 打印输出 | |
i=0 | j=1 | a[1]<a[0] | × | {1,6,3,9,7,4} | a[0]=1 | |
j=2 | a[2]<a[1] | √ | {1,3,6,9,7,4} | |||
j=3 | a[3]<a[2] | × | {1,3,6,9,7,4} | |||
j=4 | a[4]<a[3] | √ | {1,3,6,7,9,4} | |||
j=5 | a[5]<a[4] | √ | {1,3,6,7,4,9} | |||
j=6 | 跳出内循环 | |||||
第2轮外循环 | 内循环要进行5次 | |||||
i=1 | j=1 | a[1]<a[0] | × | {1,3,6,7,4,9} | a[1]=3 | |
j=2 | a[2]<a[1] | × | {1,3,6,7,4,9} | |||
j=3 | a[3]<a[2] | × | {1,3,6,7,4,9} | |||
j=4 | a[4]<a[3] | √ | {1,3,6,4,7,9} | |||
j=5 | a[5]<a[4] | × | {1,3,6,4,7,9} | |||
j=6 | ||||||
第3轮外循环 | 内循环要进行5次 | |||||
i=2 | j=1 | a[1]<a[0] | × | {1,3,6,4,7,9} | a[2]=4 | |
j=2 | a[2]<a[1] | × | {1,3,6,4,7,9} | |||
j=3 | a[3]<a[2] | √ | {1,3,4,6,7,9} | |||
j=4 | a[4]<a[3] | × | {1,3,4,6,7,9} | |||
j=5 | a[5]<a[4] | × | {1,3,4,6,7,9} | |||
j=6 | ||||||
第4轮外循环 | 内循环要进行5次 | |||||
i=3 | j=1 | a[1]<a[0] | × | {1,3,4,6,7,9} | a[3]=6 | |
j=2 | a[2]<a[1] | × | {1,3,4,6,7,9} | |||
j=3 | a[3]<a[2] | × | {1,3,4,6,7,9} | |||
j=4 | a[4]<a[3] | × | {1,3,4,6,7,9} | |||
j=5 | a[5]<a[4] | × | {1,3,4,6,7,9} | |||
j=6 | ||||||
第5轮外循环 | 内循环要进行5次 | |||||
i=4 | j=1 | a[1]<a[0] | × | {1,3,4,6,7,9} | a[4]=7 | |
j=2 | a[2]<a[1] | × | {1,3,4,6,7,9} | |||
j=3 | a[3]<a[2] | × | {1,3,4,6,7,9} | |||
j=4 | a[4]<a[3] | × | {1,3,4,6,7,9} | |||
j=5 | a[5]<a[4] | × | {1,3,4,6,7,9} | |||
j=6 | ||||||
第6轮外循环 | 内循环要进行5次 | |||||
i=5 | j=1 | a[1]<a[0] | × | {1,3,4,6,7,9} | a[5]=9 | |
j=2 | a[2]<a[1] | × | {1,3,4,6,7,9} | |||
j=3 | a[3]<a[2] | × | {1,3,4,6,7,9} | |||
j=4 | a[4]<a[3] | × | {1,3,4,6,7,9} | |||
j=5 | a[5]<a[4] | × | {1,3,4,6,7,9} | |||
j=6 | 结束 | |||||
i=6,不成立,跳出 |