C语言 冒泡排序的问题

来源:百度知道 编辑:UC知道 时间:2024/06/24 07:59:10
为什么冒泡排序的趟数要N-1呢?

比如说输入6个数

要比较5趟?

为什么是比较5趟呢?

输入6个数 ,两两比较,比5次
第二趟:5个数 ,两两比较,比4次
第三趟:4个数 ,两两比较,比3次
第四趟:3个数 ,两两比较,比2次
第五趟:2个数 ,两两比较,比1次

和它本身就不用比啦~~~

也可以不是N-1次的。比如在第k次的时候发现序列没有变化,则程序结束。

因为
你想给6个数字排序的话
只要排放好了5个
另外一个自然有序

记住:
自然有序

给个例子:
#include<stdio.h>
void main()
{
int num[]={2,5,1,4,3,0,6,13,7,12,8,11,10,9};
int count=sizeof(num)/sizeof(num[0]);
int tmp,i,j; /*建议将i和j的定义放在这里*/
int swapped; /*建议用int,在ANSI C中没有bool类型*/

printf("Before compositor:\n");
for(i=0;i<count;i++)
{
printf("%d ",num[i]);
}
printf("\n ");
for(i=0;i<count;i++)
{
swapped=0; /*保存交换状态*/
for(j=0;j<count-i-1;j++)
{
if(num[j+1]<num[j])
{
tmp=num[j+1];
num[j+1]=num[j];
num[j]=tmp;
swapped=1; /*建议*/
}
}

if(!swapped) /*没有交换则完成