C语言 冒泡排序法

作者&投稿:单于卷 (若有异议请与网页底部的电邮联系)
C语言冒泡排序法是怎么排序的?~

C语言冒泡排序法的排序规则:
将被排序的记录数组R[1..n]垂直排列,每个记录R看作是重量为R.key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上"飘浮"。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。
初始 R[1..n]为无序区。
第一趟扫描 从无序区底部向上依次比较相邻的两个气泡的重量,若发现轻者在下、重者在上,则交换二者的位置。
即依次比较(R[n],R[n-1]),(R[n-1],R[n-2]),…,(R[2],R[1]);对于每对气泡(R[j+1],R[j]),若R[j+1].key<R[j].key,则交换R[j+1]和R[j]的内容。 第一趟扫描完毕时,"最轻"的气泡就飘浮到该区间的顶部,即关键字最小的记录被放在最高位置R[1]上。
第二趟扫描 扫描R[2..n]。
扫描完毕时,"次轻"的气泡飘浮到R[2]的位置上…… 最后,经过n-1 趟扫描可得到有序区R[1..n] 注意: 第i趟扫描时,R[1..i-1]和R[i..n]分别为当前的有序区和无序区。扫描仍是从无序区底部向上直至该区顶部。扫描完毕时,该区中最轻气泡飘浮到顶部位置R上,结果是R[1..i]变为新的有序区。
c语言冒泡排序的编程为:
#include
void sort(int *a,int len)
{int i=0;
int j;
int t;
for(i=0;i<len-1;i++)[1]
{
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;
}
}
}
}
int main(int argc, char *argv[])
{
int a[10]={
-999,2,3,77,12,88,0,-8,99,100
};
int i=0;
sort(a,10);
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
return 0;
}

#include
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、比较相邻的元素。如果第一个比第二个大(小),就交换他们两个。
2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大(小)的数。
3、针对所有的元素重复以上的步骤,除了最后已经选出的元素(有序)。
4、持续每次对越来越少的元素(无序元素)重复上面的步骤,直到没有任何一对数字需要比较,则序列最终有序。
简单的表示
#include

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;
}
参考资料来源:冒泡排序-百度百科

对你需求有点疑问:
1、不要固定数=>理解为:总排序个数是可变的,比如5个数排序,600个数排序。

2、输入一个排序一次=>理解为:每输入一个数,这个数就加到要被排序的那组数中,然后对那组数进行一次“冒泡排序”。比如:
输入1;此时序列为:1;
输入8;此时序列为:1、8;
输入5;此时序列为:1、5、8;
但是这个需求与冒泡排序算法可能有点冲突。因为你要求每次输入一个数就进行了一次排序,那么下次输入的数,是要插入已经排序好的序列中,这已经没有了“冒泡”的过程,倒变成了插入排序...

3、从后面排序=>不理解:由于你要求输入一次排序一次,并不是那种等待一组数据输入完成之后,再进行排序,这已经没有所谓的前后了啊?

第2条与第3条描述清楚后,我帮你解决...

#include<stdio.h>
int a[100] = {0};
int n = 0;
int ins(int m){
    int i = n;
    if(!m)
        return 0; 
    if(!n){
        a[0] = m
        n++;
    }
    else 
    {
        while(a[i] > m){
            a[i+1] = a[i];
            i --;
        }
        a[i+1] = m;
        n++;
    }
    printf("输出:");
    for(i = 0;i < n;i ++){
        printf("%d ",a[i]);
    }
    return 1;
}
int main(){
    int x;
    do{
    printf("输入:");
    scanf("%d",&x);
    }while(ins(x));
    return 0;
}

每输入一个数,拿这个数从数组后方依次比较,最后放在合适的位置。



看了你的题目,个人觉得插入排序比较合适,因为插入排序可以很方便的对位置进行定位,但是不要太多个数。




沁县13050466844: C语言冒泡排序法 -
拔学力欣: 冒泡排序每一趟排序把最大的放在最右边. 比如: 87 12 56 45 78 87和12交换:12 87 56 45 78 87和56交换: 56 87 45 78 87和45交换: 45 87 78 87和78交换: 78 87 到此第一趟排序结束,接下来的每一趟排序都是这样.1 2 3 4 5 6 7 8 9 ...

沁县13050466844: C语言冒泡排序法是怎么排序的? -
拔学力欣: C语言冒泡排序法的排2113序规则:5261将被排序的记录4102数组R[1..n]垂直排列,每个记录R看作是重量为R.key的气泡1653.根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上"飘浮"...

沁县13050466844: c语言中冒泡法是什么意思? -
拔学力欣: 冒泡法是一种排序方法 冒泡法5 4 3 2 1 比如上面这5个数字我们把它按照由小到大的顺序排列, 从前往后相临两位比较大小,如果前一位比后一位大就把它俩 换位,5比4大就把5和4换位,得到45321 5又比3大 5和3换位 得到43521 依次类...

沁县13050466844: 请讲解下C语言的冒泡排序法 -
拔学力欣: 冒泡法,就是通过多次循环排序的一种方法. 第一次循环,让最小(最大)的值浮到第一位, 第二次循环,让剩余的数字中最小(最大)浮到第二位 依次类推. 这种方法就像水泡上浮一样,顾名.

沁县13050466844: 求关于c语言 冒泡排序法的讲解 -
拔学力欣: 冒泡排序法是简单的排序方法之一,它和气泡从水中往上冒的情况有 些类似.其具体做法是(1)对于数组a中的1至n个数据,先将第n个和第n-1个数据进行比较,如果 a(n)<a(n-1),则两个数交换位置. 然后比较第n-1个和第n-2个数据;依次...

沁县13050466844: C语言用冒泡法和选择法对10个数进行排序 -
拔学力欣:[答案] 冒泡法: #define N 10 #include maopao(int a[N]) { int i,j,t; for(j=0;ja[i+1]) { t=a[i]; a[i]=a[i+1]; a[i+1]=t; } printf("排序后的数组为:\n"); for(i=0;i
沁县13050466844: c语言的冒泡排序 -
拔学力欣: #include <iostream> using namespace std; int main() { int a[11];int i,j,k;for(i=0;i<10;i++)cin>>a[i]; for(i=0;i<10;i++)for(j=i+1;j<10;j++) //注意这里j=i+1if(a[i]<a[j]){k=a[i];a[i]=a[j];a[j]=k;} for(k=0;k<10;k++)cout<<a[k]<<","; system("pause"); return 0; }

沁县13050466844: C语言:编写一个程序用冒泡排序实现升序排列 -
拔学力欣: 1、首先打开一个空白的C语言文件,首先先定义一组待排序的数列以及各个变量,接着就是用来处理排序的逻辑: 2、冒泡排序的逻辑是一组数从第一个数值开始,如果相邻两个数的排列顺序与期望不同,则将两个数的位置进行交换,重复这样的过程直到最后一个数不需要交换则排序完成,如果有N个数需要排序,则需要进行(N-1)趟的比较: 3、最后编译运行程序,观察最终排序的结果,可以看到数字被从小到大的排列好了,以上就是C语言冒泡排序实现的过程:

沁县13050466844: C语言:编程实现从键盘上输入一组数据,用冒泡排序进行排序输出 -
拔学力欣: 冒泡法:对10个数由大到小排序#include<stdio.h>#include<stdlib.h> main() { int i,j,a[11],m; for(i=1;i<11;i++) { scanf("%d",&a[i]); } for(j=1;j<=10;j++) { for(i=1;i<11-j;i++) { if(a[i+1]>a[i]) { m=a[i+1]; a[i+1]=a[i]; a[i]=m; } } } for(i=1;i<11;i++) { printf("%d ",a[i]); } system("pause"); } 希望能够帮到你!

沁县13050466844: 冒泡排序算法 C语言的 -
拔学力欣: #includeint main() { int n; while(scanf("%d",&n),n)//n个数 { int i,j,t,s[105]; for(i=0;i scanf("%d",s+i); for(i=0;i for(j=i+1;j if(s[i] { t=s[i]; s[i]=s[j]; s[j]=t; } for(i=0;i printf("%d ",s[i]); puts(""); } }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网