问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言冒泡排序法的详细注释?

发布网友 发布时间:2022-04-24 12:02

我来回答

4个回答

热心网友 时间:2022-05-22 02:52

起泡排序法的基本思想是:对于一个待排序的序列(假设按升序排序),从左向右依次比较相邻的两个数,如果左边的数大,则交换两个数以使右边的数大。这样比较、交换到最后,数列的最后一个数则是最大的。然后在对剩余的序列进行相同的操作。这个操作过程被称为一次起泡。
一次起泡的操作只能使数列的最右端的数成为最大者。对于10个数而言,需要9次这样的起泡过程。

热心网友 时间:2022-05-22 04:10

/* 用冒泡排序法对一维整型数组中的十个数升序排序 */
#include <stdio.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[i]和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])即可。

/* 用改进型冒泡排序法对一维整型数组中的十个数升序排序 */
#include <stdio.h>

int main()
{int i,j,t,a[10],flag;
printf("Please input 10 integers:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++) /* 改进型冒泡法排序 */
{ flag=0;
for(j=0;j<10-i-1;j++)
if(a[j]>a[j+1])
{ t=a[j]; /* 交换a[i]和a[j] */
a[j]=a[j+1];
a[j+1]=t;
flag=1;
}
if(flag==0)break;
}
printf("The sequence after sort is:\n");
for(i=0;i<10;i++)
printf("%-5d",a[i]);
printf("\n");
system("pause");
return 0;
}
这个和上面的实质一样,只是加了一个标志flag,当在一次大循环(即外层循环)内,在内层循环中如果 没有发生一次交换,那么就表示a[0]<a[1]<a[2]<a[3]<a[4]<a[5]<a[6]<a[7]<a[8]<a[9],即数组已经排序完成,此时直接退出循环,不用再比较了。

热心网友 时间:2022-05-22 05:45

' //起泡法
'void Sorting_q (uint *p,int c,int a,char b )
'{uint temp,i,j,*h=p+c;
'.. for(i=c;i<a;i++)
'...... for(p=h,j=a-1;j>i;j--,p++)
'........ if(b=='<'&&*p>*(p+1)||b=='>'&&*p<*(p+1))
'........ .{temp=*p; *p=*(p+1); *(p+1)=temp;}
'}
//调用形式:函数名(数组名,下标起始值,下标结束值,字符常量)
// 数组名: 要进行排序的数组名
// 下标起始值: 排序的范围从该下标值起
// 下标结束值: 到该下标结束,在这范围外的不动.
// 字符常量: 排序方法.'<' :从小到大排序, '>' :从大到小排序

这个才是排序算法中起泡法的绝世经典!!
看不懂的估计学C语言也没戏了

热心网友 时间:2022-05-22 07:36

我告诉你一种冒泡排序的改进版吧—快速排序,不过得要在visual
c++中运行://--------------------快速排序函数----------------------------------------------
int
partition(sqlist
&l,int
low,int
high){
//划分
int
pivotkey;
l.r[0]=l.r[low];
pivotkey=l.r[low].key;
while(low<high){
while(low<high
&&l.r[high].key>=pivotkey)--high;
l.r[low]=l.r[high];
while(low<high
&&l.r[low].key<=pivotkey)++low;
l.r[high]=l.r[low];
}
l.r[low]=l.r[0];
return
low;
}
void
qsort(sqlist
&l,int
low,int
high){
int
pivotloc;
if(low<high){
pivotloc=partition(l,low,high);
qsort(l,low,pivotloc-1);
qsort(l,pivotloc+1,high);
}
}
void
quicksort(sqlist
&l){
qsort(l,1,l.length);
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 绿萝扦插多久发芽 扦插绿萝多久发芽 炖牛排骨的做法和配料 C语言中冒泡排序法(又称起泡排序法)得具体程序 C语言中冒泡排序法(又称起泡排序法)得具体程序 C语言冒泡排序法? C语言冒泡排序法? 关于C语言冒泡排序法要详解 关于C语言冒泡排序法要详解 C语言冒泡排序。 C语言编程——冒泡排序法。要求:由主函数调用排序子函数,对n个整数进行从小到大的排序,谢了 C语言编程——冒泡排序法。要求:由主函数调用排序子函数,对n个整数进 ... C语言冒泡排序法是怎么排序的? c语言数组冒泡排序 C语言冒泡排序 c语言冒泡排序详解 C语言冒泡排序法是什么? 小炒黄牛肉有哪些好吃又操作简单的制作方法呢? 怎样做出经典的小炒黄牛肉? 香菜炒牛肉怎么做? CAD必备神器,源泉插件安装包怎样获取,源泉插件如何安装? WIN10,64位电脑在安装auto CAD 2016时一直提示缺少net.framework v2... 请大家介绍几个比较好的CAD插件,做土木建筑和钢结构用的 C语言冒泡排序法的详细注释? 求关于c语言 冒泡排序法的讲解 求关于c语言 冒泡排序法的讲解 酸洗用的是什么 化学清洗为什么先碱洗后酸洗 精密铸造酸洗主要是洗什么啊.? 哪位大虾知道,硫酸酸洗和盐酸酸洗有何区别,对酸洗废 电镀生产线为什么要进行酸洗、电镀、清洗 电化学酸洗清理的方法有几种? 澳大利亚经纬度位置是多少? 澳大利亚的经纬度范围 高中化学的水洗和酸洗是什么意思 澳大利亚纬线范围在什么和什么之间? 一般酸洗与环保清洗剂有什么区别 一群伐木逃犯翻越大山饿得杀队友吃来存活的电影叫什么名字 澳大利亚风俗习惯和禁忌 锅炉酸洗注意事项 澳大利亚国家历史 酸洗除锈和酸洗钝化的区别 钝化处理的酸洗控制有什么需要注意的?