㈠ c语言冒泡排序。
#include<stdio.h>
void main()
{
int a[10];
int i,j,t;
printf("input 10 numbers: ");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(j=0;j<9;j++) /*进行9次循环 实现9趟比较*/
for(i=0;i<9-j;i++) /*在每一趟中进行9-j次比较*/
if(a[i]>a[i+1]) /*相邻两个数比较,想降序只要改成a[i]<a[i+1]*/
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
printf("the sorted numbers: ");
for(i=0;i<10;i++)
printf(" %d",a[i]);
}
(1)c语言冒泡扩展阅读:
冒泡排序算法的运作
1、比较相邻的元素。如果第一个比第二个大(小),就交换他们两个。
2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大(小)的数。
3、针对所有的元素重复以上的步骤,除了最后已经选出的元素(有序)。
4、持续每次对越来越少的元素(无序元素)重复上面的步骤,直到没有任何一对数字需要比较,则序列最终有序。
简单的表示
#include <stdio.h>
void swap(int *i, int *j)
{
int temp = *i;
*i = *j;
*j = temp;
}
int main()
{
int a[10] = {2,1,4,5,6,9,7,8,7,7};
int i,j;
for (i = 0; i < 10; i++)
{
for (j = 9; j > i; j--)//从后往前冒泡
{
if (a[j] < a[j-1])
{
swap(&a[j], &a[j-1]);
}
}
}
for (i = 0; i < 10; i++)
{
printf("%d ", a[i]);
}
return 0;
}
参考资料来源:冒泡排序-网络
㈡ 关于C语言冒泡排序
if(num[j+i]<num[j])
改为
if(num[j+1]<num[j])
即可。
完整的修改后程序如下:
//---------------------------------------------------------------------------
#include<stdio.h>
void main()
{
int num[]={2,5,1,4,3,0,6,13,7,12,8,11,10,9};
int count=sizeof(num)/sizeof(num[0]);
int tmp,i,j; /*建议将i和j的定义放在这里,ANSI C不允许你那样定义变量*/
int swapped; /*建议用int,在ANSI C中没有bool类型*/
for(i=0;i<count;i++)
{
swapped=0; /*建议*/
for(j=0;j<count-i-1;j++)
{
if(num[j+1]<num[j]) /**** 注意这里!应该是num[j+1]而非num[j+i] ****/
{
tmp=num[j+1];
num[j+1]=num[j];
num[j]=tmp;
swapped=1; /*建议*/
}
}
if(!swapped)
break;
}
for(i=0;i<count;i++)
{
printf("%d ",num[i]);
}
}
//---------------------------------------------------------------------------
*********************************
标准C语言中没有布尔类型(也就是你的程序中的bool类型),逻辑真和逻辑假用非0和0表示,非0值表示逻辑真(也就是你程序中的true),0表示逻辑假(也就是你程序中的false)。
这些修改只是建议,除了if语句部分的修改是必须的之外,如果你的程序不考虑移植性,其它部分可以保留原样。
㈢ c语言中冒泡是什么
是一种对一维序列进行排序的算法
过程(以降序为例):
将第一个元素与第二个比较,如果第一个小于第二个,则交换,小的数被后移,接下来第二个和第三个比较,如果第二个小于第三个,则再交换,小的数再次后移,重复操作,第一轮比较完毕之后,最小的数被交换到了最后一个位置,犹如气泡层层上浮到了顶层,如此下去经过
N-1
轮的比较,可将
N
个数排好。
㈣ c语言冒泡排序法详解
任意两个数作比较,大的放后面,小的放前面,然后大的在和下一个数比较,还是大的放后小的往前,以此类推,直到所有数比完了,然后输出
㈤ c语言中冒泡法是什么意思
冒泡法是一种排序方法
冒泡法5
4
3
2
1
比如上面这5个数字我们把它按照由小到大的顺序排列,
从前往后相临两位比较大小,如果前一位比后一位大就把它俩
换位,5比4大就把5和4换位,得到45321
5又比3大
5和3换位
得到43521
依次类推最后得到
43215
这样就把最大的一个数字移到最后面了
然后不看5
,剩下4321
再用上面的方法把4移动到最后
得到
32145
在不看45
剩下321
把3移动到
最后,依此类推。
最终得到12345
这就是冒泡法,是计算机编程排序中最简单快捷的方法。
除此意外我还能写出许多排序方法,但是效率上都不如冒泡法
至于为什么叫冒泡法呢,你把这几个数字竖起来看
1
2
3
4
5
把最大的数字5看成最大的泡泡,浮到最上,然后4又浮上去,依此类推
得到
5
4
3
2
1
所以形象的称为冒泡法
——————————————————————————————————
以下是C语言中十个数的冒泡法排序的代码
#include<stdio.h>
#include<conio.h>
int
main(void)
{
long
arrary[9],
box=0L;
int
i1=0,
i2=0;
for(i1=0;i1<9;i1++)
arrary[i1]=0;
printf("输入数组元素:\n");
for(i1=0;i1<=9;i1++)
{
printf("%3d>",i1+1);
scanf("%d",&arrary[i1]);
}
for(i1=0;i1<=9;i1++)
for(i2=0;i2<=9-i1;i2++)
{
if(arrary[i2]<arrary[i2+1])
{
box=arrary[i2+1];
arrary[i2+1]=arrary[i2];
arrary[i2]=box;
}
}
printf("\n排序后为:\n");
for(i1=0;i1<=9;i1++)
printf("%3d>%d\n",i1+1,arrary[i1]);
getch();
return
0;
}
㈥ C语言简单冒泡法程序
#include<stdio.h>
voidsort(int*a,intlen)
{inti=0;
intj;
intt;
for(i=0;i<len;i++)
{
for(j=0;j<len-i-1;j++)
{
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
}
intmain(intargc,char*argv[])
{
inta[10]={
-999,2,3,77,12,88,0,-8,99,100
};
inti=0;
sort(a,10);
for(i=0;i<10;i++)
{
printf("%d",a[i]);
}
return0;
}
(6)c语言冒泡扩展阅读
冒泡排序法
#include"stdio.h"
voidmain()
{
inta[10];
inti,j,temp;
//输入10个整型数据
printf("Pleaseinputtennumbers: ");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
//排序
for(i=0;i<9;i++)//10个数,10-1轮冒泡,每一轮都将当前最大的数推到最后
{
for(j=0;j<9-i;j++)//9-i,意思是每当经过一轮冒泡后,就减少一次比较
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
//打印排序结果
for(i=0;i<10;i++)
printf("%d ",a[i]);
return0;
}
㈦ C语言冒泡排序
#include<stdio.h>
#define N 20
main()
{
int a[N],i,j,temp,n;
printf("input 20 numbers:\n");
for(i=0;i<N;i++)
scanf("%d",&a[i]);
for(i=0;i<N-1;i++)
for(j=0;j<N-1-i;j++)
if(a[j]<a[j+1])
{temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;}
for(i=0;i<N;i++)
printf("%d ",a[i]);
printf("\n");
printf("input n:");
scanf("%d",&n);
for(i=0;i<N;i++)
if(a[i]==n)
{printf("YES %d\n",i);
break;}
if(i==20)printf("NO found\n");
}
㈧ c语言冒泡法
结合上下文看啦,inner初始化为冒泡的头,一旦前者小于后面的就交换,则说明它是在找内循环部分的最大值啊
㈨ c语言冒泡排序
输出里面删除“&”;
程序稍有问题,做修改:
#include"stdio.h"
intmain()
{
intn,a[1000];
scanf("%d",&n);
for(inti=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(inti=0;i<n-1;i++)
{
for(intj=1;j<n;j++)
{
if(a[j-1]>a[j])
{
inttemp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}
}
}
for(inti=0;i<n;i++)
{
printf("%d",a[i]);
}
return0;
}
希望找一下自己的错误。
望采纳~
㈩ c语言冒泡算法
第二个C语言程序是正确的冒泡程序
因为这两个C语言程序只有这句不一样,第一个程序是for(j=0;j<N-i;j++)第二个程序是for(j=0;j<N-i-1;j++)
第一个程序在i=0时,变成for(j=0;j<N;j++),又当j=N-1时,而下面if(a[j+1]<a[j])变成if(a[N]<a[N-1]),a[N]访问出了数组大小(因为C语言数组元素下标从0到N-1).这在其他语言会出数组越界错误.但是C语言不检查数组越界,所以不会报错,但是这样做不安全,有数据溢出的风险.
因此第二个程序是正确的for(j=0;j<N-i-1;j++),在i=0时变成for(j=0;j<N-1;j++)又当j=N-2时下面if(a[j+1]<a[j])变成if(a[N-1]<a[N-2])不会数组越界