Chinaunix首页 | 论坛 | 博客
  • 博客访问: 463412
  • 博文数量: 68
  • 博客积分: 2606
  • 博客等级: 上尉
  • 技术积分: 1308
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-13 23:01
文章分类
文章存档

2012年(6)

2011年(62)

分类: C/C++

2011-09-02 20:42:10

------------------------------------------
本文为本人原创,欢迎转载!
转载请注明出处:snowboy.blog.chinaunix.net
雪夜流星
------------------------------------------
冒泡排序算法的基本思想是两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。实现代码如下:

#include
#include


/*****************************************************************

 *功能描述:冒泡排序算法

 *传入参数:num:需要排序的数组首地址, n:数组的元素

 *传出参数:num:排序后的数组首地址,传入参数和传出参数空间复用,降低空间复杂度

 *返回值: 无

 ****************************************************************/


void insert_sort(int *num, int n)
{
int tmp, i, j;
int change = 0;
/*判断参数的合法性,当指针为空或者数组中只有一个元素时,直接返回*/
if((num == NULL) || (n<2))
{
return;
}

for (i=n-1; i>0; i--)//i表示这次循环需要比较的次数
{
for (j=0; j      些元素中最大的数放入num[i]中;数组总元素为n,最      大索引为n-1;注意防止内存越界
{
change = 0;
if (num[j] > num[j+1])
{
tmp = num[j];
num[j] = num[j+1];
num[j+1] = tmp;

change = 1;
}
}
if (0 == change)//当一轮比较中,没有交换元素时,说明已经是有序表,直   接退出
{
break;
}
}

return;
}

int main(void)
{
int i;
int num[5] = {5, 4, 3, 2, 1};
printf("before:\n");
for(i=0; i<5; i++)
{
printf("num[%d]:%d\n", i, num[i]);
}
insert_sort(num, 5);

printf("after:\n");
for(i=0; i<5; i++)
{
printf("num[%d]:%d\n", i, num[i]);
}

return 0;
}
阅读(1249) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~