#C语言#起泡排序法的总结

Bruce李而已 2016-06-14 01:41:40
新手小白,代码学习过程中总结一下起泡排序法。
起泡排序法的基本思路:每次将相邻的两个数进行比较,将小的调到前头。
若有6个数:9,8,5,4,2,0
第一次先将最前面的两个数8和9对调,第二次将第二个和第三个数(9和5对调)……如此一共进行五次,得到8,5,4,2,0,9的顺序。可以看到,大数已沉底,而小数上升。最小的数0已向上浮起一个位置,经过一次比较已经得到最大的数9。

然后进行第二趟比较,对余下的五个数进行新一次的比较。(8,5,4,2,0)进行新一轮的比较,以便使第二大的数沉底。按以上方法进行第二次比较。得到第二大的数8。

按此规律,可以推知,对六个数要比较五次,才能使六个数按大小顺序排列。
第一趟要比较5次,第二趟比较4次……第五趟比较1次。
规律:如果有n个数,则要进行n-1次比较。在第一趟比较中药进行n-1次两两比较,在第j趟比较中要进行n-j次两两比较。
我将起泡排序写成函数
#include<stdio.h>
/*==========================================================
*函数名称:main()
*功 能:主函数
*入口参数:
*出口参数:
*说 明:使用起泡法将给定的数组排序
*==========================================================*/
void main()
{
void qipao_paixu(int num[]);
int a[10]={655,23,56,2345,3897,36,478,31,90,208};
int i;
printf("原始序列:");
for(i=0;i<10;i++)
printf("%5d",a[i]);
printf("\n");
printf("起泡法排序\n");
qipao_paixu(a);
printf("排序后的序列:");
for(i=0;i<10;i++)
printf("%5d",a[i]);

}
/*==========================================================
*函数名称:qipao_paixu()
*功 能:起泡排序
*入口参数:
*出口参数:
*说 明:对数组中的十个元素进行起泡排序
*==========================================================*/
void qipao_paixu(int num[])
{
int i,j,temp;
for(j=0;j<9;j++)//控制j趟比较
for(i=0;i<9-j;i++)//第j趟中,控制n-j次两两比较
{
if(num[i]>num[i+1])//判断序列中两两相邻数字大小
{
temp=num[i];//小数向前放,大数沉底
num[i]=num[i+1];
num[i+1]=temp;
}

}

}


经codeblock编译运行

新手小白,还望多指正,以后常发帖交流。
...全文
214 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-06-16
  • 打赏
  • 举报
回复
各种排序算法动画演示http://www.webhek.com/misc/comparison-sort/
paschen 2016-06-16
  • 打赏
  • 举报
回复
楼主有兴趣建议把各种排序算法都实现一下,再进行一下比较
天夏123 2016-06-16
  • 打赏
  • 举报
回复
还有时间复杂度分析
Bruce李而已 2016-06-16
  • 打赏
  • 举报
回复
版主,我这里blog登陆不了。所以发到这里。这里可以发PM你么?
talkdream 2016-06-15
  • 打赏
  • 举报
回复
是呢,放到这里你结贴咋搞啊
小灸舞 版主 2016-06-14
  • 打赏
  • 举报
回复
你这个可以发博客

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧