冒泡排序
一、每次比较两个相邻的元素,如果他们的顺序错误,就两两交换一下。
一开始我们就要求从大到小排序的话!注意是大到小,所以越小的就要排在越后面!
列出一下几个数字 12 32 99 18 进行排序
因为叫冒泡排序,所以图里特地用圈圈来表示泡泡。
看图应该可以清楚看到最小的12通过3次交换跑到了最后一个,相反,比12大的数字跑到了前面。
最后12就像泡泡一样到了最上面。
- 注意12交换了3次,作为最小的数字待在了最后一位(12应该在的位置),我们就称“归位”!
- 同时我们把每一个数字归位时,我们就需要循环遍历一次,称为“一趟”,所以4个数字,就需要3趟!
- 4个数字中3个位置到找到, 剩下的位置就固定了。
- 以上是需要清楚的!
- 总结:有n个数字,就需要n-1个数要归位!
二 代码块
代码如下(示例):
//冒泡排序
int main()
{
int a[100],i,j ,t, n;
scanf("%d" ,&n);
for(i=1;i<=n;i++){
scanf("%d",&a[i]);
}
//上面是输出需要排序的数字 12 35 99 18
//冒泡排序的核心部分
for(i=n-1;i>0;i--){ //前面了说了 n个数就要n-1个数字要归位
//就是进行n-1趟循环
//一趟一个数字找到它的位置
for(j=1;j<=n-i;j++){ //这里j为什么是<=n-i呢?
//好好想想,前面有多少数字归位了,我们这里就不用了在浪费时间去在去比较了啊!
if(a[j]<a[j+1]){ //这里是开始比较,
t=a[j]; //假设现在是第一趟,12现在首先和35比较,
a[j]=a[j+1] //35比12大,开始交换,交换完后
a[j+1]=t; // 继续在第二个循环中循环
//直到12到达最后一位,跳出循环准备进行第二趟
a[j+1]=t;
}
}
}
for(i=n;i>0;i--){ //最后打印输出
printf("%d",a[i]);
printf(" ");
}
getchar();
getchar();
return 0;
}
2.输入数据
代码如下(示例):
12 35 99 18
输出结果:99 35 18 12
总结
这里要说一下的是冒泡排序它的复杂度为:
O{n^2}