您的位置:首页 > 其它

冒泡排序法---排序算法(三)

2013-10-23 14:55 232 查看

1.排序原理

每次交换将最大的移到顶端,将像是水泡一样往上冒,所以将冒泡排序
例如:7 6 5 4 3 2 1
第一次 7>6所以交换7和6得6 7 5 4 3 2 1
第二次 7>5所以交换7和5得6 5 7 4 3 2 1
第三次 7>4所以交换7和4得6 5 4 7 3 2 1
第四次 7>3所以交换7和3得6 5 4 3 7 2 1
第五次 7>2所以交换7和2得6 5 4 3 2 7 1
第六次 7>1所以交换7和1得6 5 4 3 2 1 7
以上为一次冒泡排序,将最大的7冒泡到顶端
然后再对 6 5 4 3 2 1进行第二次冒泡排序 得5 4 3 2 1 6
然后再对 5 4 3 2 1进行第三次冒泡排序行4 3 2 1 5
然后 再对4 3 2 1进行第四次冒泡排序行3 2 1 4
然后再对3 2 1 进行第五次冒泡排序得2 1 3
最后对2 1 进行第六次冒泡排序得1 2
整个排序结果得:1 2 3 4 5 6 7

2.排序代码

#include <stdio.h>

void printArray(int a[],int size){
printf("数组为:[%d] ",a[0]);
for (int i=1;i<size;i++)
{
printf(" %d ",a[i]);
}
printf("\n");
}
void main()
{
//a[0]为监视哨
int a[8]={0,7,6,5,4,3,2,1};
int len=8;
for (int i=1;i<len;i++)
{

for (int j=2;j<=len-i;j++)
{
printf(" i=%d j=%d ",i,j);
if (a[j-1]>a[j])
{
printf("[%d]交换[%d]",a[j-1],a[j]);
a[0]=a[j];
a[j]=a[j-1];
a[j-1]=a[0];
}
printArray(a,len);
}
}
printArray(a,len);
}


3.排序结果

i=1 j=2 [7]交换[6]数组为:[6]  6  7  5  4  3  2  1
i=1 j=3 [7]交换[5]数组为:[5]  6  5  7  4  3  2  1
i=1 j=4 [7]交换[4]数组为:[4]  6  5  4  7  3  2  1
i=1 j=5 [7]交换[3]数组为:[3]  6  5  4  3  7  2  1
i=1 j=6 [7]交换[2]数组为:[2]  6  5  4  3  2  7  1
i=1 j=7 [7]交换[1]数组为:[1]  6  5  4  3  2  1  7
i=2 j=2 [6]交换[5]数组为:[5]  5  6  4  3  2  1  7
i=2 j=3 [6]交换[4]数组为:[4]  5  4  6  3  2  1  7
i=2 j=4 [6]交换[3]数组为:[3]  5  4  3  6  2  1  7
i=2 j=5 [6]交换[2]数组为:[2]  5  4  3  2  6  1  7
i=2 j=6 [6]交换[1]数组为:[1]  5  4  3  2  1  6  7
i=3 j=2 [5]交换[4]数组为:[4]  4  5  3  2  1  6  7
i=3 j=3 [5]交换[3]数组为:[3]  4  3  5  2  1  6  7
i=3 j=4 [5]交换[2]数组为:[2]  4  3  2  5  1  6  7
i=3 j=5 [5]交换[1]数组为:[1]  4  3  2  1  5  6  7
i=4 j=2 [4]交换[3]数组为:[3]  3  4  2  1  5  6  7
i=4 j=3 [4]交换[2]数组为:[2]  3  2  4  1  5  6  7
i=4 j=4 [4]交换[1]数组为:[1]  3  2  1  4  5  6  7
i=5 j=2 [3]交换[2]数组为:[2]  2  3  1  4  5  6  7
i=5 j=3 [3]交换[1]数组为:[1]  2  1  3  4  5  6  7
i=6 j=2 [2]交换[1]数组为:[1]  1  2  3  4  5  6  7
数组为:[1]  1  2  3  4  5  6  7
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: