您的位置:首页 > 其它

C--经典算法之排序---优化过的冒泡排序

2014-04-10 15:24 267 查看
/*
**	Description: 冒泡排序
**	Method:
**  54321
4321[5]
321[45]
21[345]
1[2345]
*/

#include <stdio.h>
#include <time.h>

#define swap(x, y){int tmp; tmp = x; x = y; y = tmp;}

int main(unsigned char argc, unsigned int **argv)
{
int src[] = {10,9,8,7,6,5,4,3,2,1};
int value = 0;
int i = 0, j = 0, k = 0;
int cnt = 0;
int tmp = 0;
double start, finish;

tmp = cnt = sizeof(src)/sizeof(int);
start = (double)clock();

/* 传统的冒泡排序 */
/*
for(j = 0; j < cnt-1; j++,tmp--)
{
for(i = 0; i < tmp-1; i++)
{
if(src[i+1] < src[i])
swap(src[i], src[i+1]);
}
}
*/

/* 优化的冒泡排序 */

for(j = 0; j < cnt/2; j++)
{
for(i = 0; i < tmp-1; i++)
{
if(src[i+1] < src[i])
swap(src[i], src[i+1]);
}

#if 0
for(i = 0; i < cnt; i++)
printf("%d,", src[i]);
printf("\n");
#endif

for(k = tmp-j-1; k >= 0; k--)
{
if(src[k] < src[k-1])
swap(src[k], src[k-1]);
}
}

for(i = 0; i < cnt; i++)
printf("%d,", src[i]);
printf("\n---------------------------------------\n");

finish = (double)clock();
printf("the running time is %f \n", finish-start);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: