
正文
c语言自定义一个冒泡函数 c语言冒泡法排序代码流程图
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
用数组作函数参数,定义一个实现冒泡排序的函数,在主函数中完成数据的输入和输出.
c语言的代码如下:
#includestdio.h
void Bubble_Sort(int num[50],int n){//传入数组和数组的大小,冒泡排序函数
int i,j,temp;
for(i=0;in;i++){
for(j=0;jn-1-i;j++){
if(num[j]num[j+1]){
temp=num[j];
num[j]=num[j+1];
num[j+1]=temp;
}
}
}
}
int main(){ //主函数
int num[50];
int n,i;
scanf("%d",n);
for(i=0;in;i++){
scanf("%d",num[i]); //输入数据
}
Bubble_Sort(num,n); //调用函数
for(i=0;in;i++){
printf("%d ",num[i]); //输出
}
return 0;
}
扩展资料
其他排序算法
1、插入排序
插入排序:已知一组升序排列数据a[1]、a[2]、……a[n],一组无序数据b[1]、b[2]、……b[m],需将二者合并成一个升序数列。首先比较b[1]与a[1]的值,若b[1]大于a[1],则跳过,比较b[1]与a[2]的值;
若b[1]仍然大于a[2],则继续跳过,直到b[1]小于a数组中某一数据a[x],则将a[x]~a[n]分别向后移动一位,将b[1]插入到原来a[x]的位置这就完成了b[1]的插入。b[2]~b[m]用相同方法插入。(若无数组a,可将b[1]当作n=1的数组a)
2、希尔排序
由希尔在1959年提出,又称希尔排序(shell排序)。已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。发现当n不大时,插入排序的效果很好。
首先取一增量d(dn),将a[1]、a[1+d]、a[1+2d]……列为第一组,a[2]、a[2+d]、a[2+2d]……列为第二组……,a[d]、a[2d]、a[3d]……列为最后一组以次类推,在各组内用插入排序,然后取d'd,重复上述操作,直到d=1。
参考资料来源:百度百科-排序
相关问答
Q1: C语言:写一函数,用“冒泡法”对输入的10个字符按由小到大顺序排列
1、打开Visual stdio 2019软件新建空白c文件,在源文件处右击鼠标,选择添加下面的新建项,此时会弹出窗口:
2、弹出的窗口选择C++文件,将文件扩展名改为“.c”点击添加完成新建c文件,之后就可以编写程序了:
3、接下来就可以编写程序了,首先最前面的部分为输入数字的部分,之后的程序会对用户输入的数字就行排序,最后则是将结果打印出来。冒泡排序需要用到两层循环,第一层循环遍历数组中的元素,第二层则进行两两比较,如果顺序不对就要对其进行换位,直到排序完成:
4、最后执行程序观察结果,按下crtl+F5弹出程序,随意输入10个数,按下回车键执行结果,此时就可以看到排序后的结果了。以上就是c语言冒泡排序程序的演示:
Q2: C语言的“冒泡排序”怎么做?sort(str)什么意思?
对于冒泡:
可以这样考虑
外层循环式控制一共有多少个泡需要排序, 这个当然要用循环
内层循环控制把某一个泡放到正确c语言自定义一个冒泡函数的位置, 这个也要用循环, 因为这个泡要和所有未排序泡比较一遍, 然后才能知道自己应该处的位置
这里有两个点,明白c语言自定义一个冒泡函数了的话,这道题就明白c语言自定义一个冒泡函数了
1. 外层循环: 仅仅控制一共有多少个泡需要排序, 比如代码中a[10], 一共是10个元素
2. 内层循环: 仅仅控制把当前最大的泡放到最后, 也就是一次内层循环,仅仅把最大的那个泡放到最后了而已
把1和2综合起来看
当j=0时,把a数组10个元素中最大的泡放到最后
当j=1时,把a数组10个元素中第二大的元素放到倒数第二个位置
依次类推..直到第10大的元素,即最小的元素放到正数第一个位置
楼主可以这样测试一下,会更加清晰,把第一个循环去掉, 内层循环改为:
for(i=0; i 10; i++) 相当于仅执行上述j=0的一次内层循环, 这个循环的作用是把最大的元素放到最后
在解释下内层循环为什么是 i10-j 其实这个不难理解
当j=0时, 相当于 for(i=0;i10;i++) 也就是遍历所有元素,把最大的放到最后
当j=1时, 相当于 for(i=0;i9;i++) 这次仅仅遍历前9个元素,把前9个元素中最大的放到第九个位置, 因为第10个位置已经是最大的了,不用再次比较了.
如果实在是对嵌套循环理解不了,还有个简单的办法,把外层循环解开:
也就是可以这么写:
//----------------------------------------
for(i=0;i10;i++) //等价于j=0
if (a[i]a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
for(i=0;i9;i++) //等价于j=1
if (a[i]a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
...//同上,仅仅是把i后面的值递减,直到
for(i=0;i1;i++) //等价于j=9
if (a[i]a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
上面这一系列代码,等价于原来的双层嵌套循环
sort(str) 就是用户自定义的冒泡排序函数的函数名c语言自定义一个冒泡函数,str作为函数参数
Q3: 用C语言编写函数,要实现快速排序算法或者冒泡法
冒泡法排序函数如下:
void bubble(int a[],int n)
{int i,j,t;
for(i=0;in-1;i++)/*共进行n-1轮*/
for(j=0;jn-1-i;j++)/*每轮在前n-i个数中比较*/
if(a[j]a[j+1]) /*若相邻元素逆序*/
{t=a[j]; a[j]=a[j+1];a[j+1]=t;}/*就交换*/
}
void sort(int *a, int left, int right)
{
if(left = right)/*如果左边索引大于或者等于右边的索引就代表已经整理完成一个组了*/
{
return ;
}
int i = left;
int j = right;
int key = a[left];
while(i j) /*控制在当组内寻找一遍*/
{
while(i j key = a[j])
/*而寻找结束的条件就是,1,找到一个小于或者大于key的数(大于或小于取决于你想升
序还是降序)2,没有符合条件1的,并且i与j的大小没有反转*/
{
j--;/*向前寻找*/
}
a[i] = a[j];
/*找到一个这样的数后就把它赋给前面的被拿走的i的值(如果第一次循环且key是
a[left],那么就是给key)*/
while(i j key = a[i])
/*这是i在当组内向前寻找,同上,不过注意与key的大小关系停止循环和上面相反,
因为排序思想是把数往两边扔,所以左右两边的数大小与key的关系相反*/
{
i++;
}
a[j] = a[i];
}
a[i] = key;/*当在当组内找完一遍以后就把中间数key回归*/
sort(a, left, i - 1);/*最后用同样的方式对分出来的左边的小组进行同上的做法*/
sort(a, i + 1, right);/*用同样的方式对分出来的右边的小组进行同上的做法*/
/*当然最后可能会出现很多分左右,直到每一组的i = j 为止*/
}
Q4: C语言简单冒泡法程序
1、打开Visual stdio软件,在空项目里新建一个c语言程序空文件:
2、弹出的窗口选择C++文件,将文件扩展名改为“.c”点击添加完成新建c文件,之后就可以编写程序了:
3、这里从数组头部开始,不断比较相邻的两个元素的大小,让较大的元素逐渐往后移动(交换两个元素的值),直到数组的末尾,经过一轮的比较,就可以找到最大的元素,并将它移动到最后一个位置,然后依次类推直到数组的最后一个数比较完,最后输出结果;
4、最后需要执行程序,按下crtl+F5弹出程序的执行结果,就可以看到排序后的结果了:
Q5: c语言编一个冒泡排序函数void mysort(int num[],int n),用冒泡法对n个整数
#include stdio.h
void mysort(int num[],int n){
int temp;
for(int i=1;in;i++){
for(int j=0;jn;j++)
if(num[i]num[j]){
temp=num[i];
num[i]=num[j];
num[j]=temp;}
}
printf("\n由大到小排列c语言自定义一个冒泡函数的:\n");
for(int t=0;tn;t++)
printf("%d ",num[t]);
printf("\n");
}
int main()
{
int n;
int num[100];
scanf("%d",n);
for(int i=0;in;i++)
scanf("%d",num[i]);
mysort(num,n);
return 0;
}
c语言自定义一个冒泡函数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言冒泡法排序代码流程图、c语言自定义一个冒泡函数的信息别忘了在本站进行查找喔。







