博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C 实现冒泡排序
阅读量:4071 次
发布时间:2019-05-25

本文共 974 字,大约阅读时间需要 3 分钟。

#include <stdio.h>

#include <stdlib.h>

int main()

{
int i,j,t,a[10];
printf("Please input 10 integers:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++) {
for(j=0;j<10-i-1;j++) {
if(a[j]>a[j+1]) {
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
printf("The sequence after sort is:\n");

for(i=0;i<10;i++)

printf("%-5d",a[i]);

printf("\n");

system("pause");
return 0;
}

其中i=0时:

j从0开始a[0],a[1]比较大小,把其中的较大者给a[1],然后j++,a[1]和a[2]再比较,再把两者中的较大者给a[2],这样a[0],a[1],a[2]中的最大者已经交换到a[2]中,这个过程继续,直到j=10-i-1=9 这样a[9]中的为10个数中的最大数。
然后i=1时:
由于最大数已找到并放到a[9]中,所以这一次循环j最大只需到10-i-1=8,即a[8]即可,再次从j=0开始a[j]和a[j+1]两两比较交换,最后次大数放到a[8]中
然后i++,继续...
当i=9时已经过9次两两比较完成所有排序,i<9不再成立退出比较。
对于n个数,只需要进行n-1次外循环的两两比较就完成排序。
至于按降序排列只需将if(a[j]>a[j+1])改为if(a[j]<a[j+1])即可。

另外:冒泡法可以做一上改进,在某种情况下可能性能好一点,那就是在“if(a[j]>a[j+1]) {” 里面加入一个标识,如果没有在子循环中发生交换的话,那就说明现在已经是排好了,直接跳出外面循环。

for(i=0;i<9;i++) {

int nStop = 0;
for(j=0;j<10-i-1;j++) {
if(a[j]>a[j+1]) {
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
nStop = 1;
}
}
if (nStop == 0)
break;
}

转载地址:http://wseji.baihongyu.com/

你可能感兴趣的文章
JScrollPanel中水平滚动条的出现
查看>>
JTable中,显示checkbox以及更改选中状态
查看>>
拉格朗日插值计算器
查看>>
java中的synchronized关键字
查看>>
svn在windows下创建服务
查看>>
hibernate的二级缓存的积累
查看>>
include servlet的问题解决
查看>>
solaris下安装自动安装工工具以及环境变量设置
查看>>
solaris下安装自动安装工工具以及环境变量设置
查看>>
solaris下vi的使用 转的。。和linux下的不太一样
查看>>
solaris10下vnc的安装
查看>>
sqlserver 2005导出数据为sql的办法
查看>>
Solaris Sparcv9下jdk64位的安装
查看>>
容易忽视但是功能灰常强大的Java API
查看>>
转来的一篇关于hibernate的查询资料,很不错
查看>>
httpclient3.1下的请求头和params
查看>>
java中的image 的一些概念
查看>>
easyui中不显示出来的一个问题
查看>>
httpclient自动执行http的302重定向
查看>>
真正最正确的用BAT运行JAVA不显示DOS窗口(连闪一下都不闪)
查看>>