如果你问如何进行“冒泡法排序”,代码如下:
#include <stdio.h>
#define N 5
void main()
{
int a[N] = {7, 5, 6, 2, 3}; //升序
int i, j, t;
for(i = 0; i < N-1; i++) //进行N-1趟比较
for(j = 0; j < N-1-i; j++) //每一趟进行N-1-i次比较,使每一趟比较都使最大的数“沉底”
{
if(a[j] > a[j+1]) //交换相邻的数
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
for(i = 0; i < N; i++)
printf("%d ",a[i]);
printf("\n");
}
[此贴子已经被作者于2007-8-17 11:29:03编辑过]
楼主的意思,是不是就是要 冒泡的优化版。
楼上兄弟的代码做了点改进, 思想是: 加一个标记, 如果内循一次过去,没有一次被交换说明己经排好序了,
所以之后就没有必要在循环下去。
我没有在机上调试,楼主自己动动手。反正思想就这么个思想,说法也就这么个说法。
#include <stdio.h>
#define N 5
void main()
{
int a[N] = {7, 5, 6, 2, 3};
int i, j, t;
bool flag=true;
for(i = 0; i < N-1,flag; i++) // 这里
{
flag=false; //这里
for(j = 0; j < N-1-i; j++)
{
if(a[j] > a[j+1])
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
flag=true; //这里, 如果一次过去有交换就 记为 true
}
}
}
for(i = 0; i < N; i++)
printf("%d ",a[i]);
printf("\n");
}