C语言:编写一个程序用冒泡排序实现升序排列

供稿:hz-xin.com     日期:2025-01-14
c语言编程:对10个数冒泡排序(升序)。

#include
int main(){
int number[10] = {95, 45, 15, 78, 84, 51, 24, 12,34,23};
for (int j = 0; j < 9; j++)
for (int i = 0; i < 9 - j; i++) {
if(a[i] > a[i + 1]) {
int temp = a[i];a[i] = a[i + 1];
a[i + 1] = temp; }
}
for (int i = 0; i < 10; i++) {
printf(“%d”,a[i]); }
}

扩展资料:
常见排序算法
快速排序、希尔排序、堆排序、直接选择排序不是稳定的排序算法,而基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序是稳定的排序算法。

插入排序
已知一组升序排列数据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[1]、a[2]、……a[n],需将其按升序排列。首先任取数据a[x]作为基准。
比较a[x]与其它数据并排序,使a[x]排在数据的第k位,并且使a[1]~a[k-1]中的每一个数据a[x],然后采用分治的策略分别对a[1]~a[k-1]和a[k+1]~a[n]两组数据进行快速排序。
希尔排序
已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。
首先取一增量d(d<n),将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。
参考资料:排序-百度百科

#include
int fun(int *a,int n);
int main(void)
{ int a[30],n,i;
printf("n=");
scanf("%d",&n); /*输入参与排序的数字的个数n*/
for(i=0;i<n;i++)
{ printf("a[%d]=",i);
scanf("%d",&a[i]); /*依次输入这n个数*/
}
fun(a,n); /*调用自定义函数进行冒泡排序*/
for(i=0;i<n;i++) /*输出排序后的结果*/
printf("%d ",a[i]);
printf("
");
}
int fun(int *a,int n)
{ int i,j,t;
for(i=0;i<n-1;i++) /*冒泡排序*/
for(j=0;j<n-1;j++)
if(a[j]>a[j+1]) { t=a[j];a[j]=a[j+1];a[j+1]=t; }
/*如果后面的数小于前面的数,则将他俩交换次序*/
}

程序如下:

#include <stdio.h>

int main ()

{

int a[10];

int i, j, t;

printf ("请输入十个数:
");

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

{

printf ("a[%d]=", i+1);

scanf ("%d",&a[i]);

}

for (j = 0;j < 9; j++)

for (i = 0; i < 9 - j; i++)

if (a[i] > a[i+1])

{

t = a[i];

a[i] = a[i+1];

a[i+1] = t;

}

printf ("由小到大的顺序为:
");

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

{

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

}

printf ("
");

return 0;

运行结果

请输入十个数:

a[1]=7

a[2]=8

a[3]=9

a[4]=6

a[5]=5

a[6]=4

a[7]=1

a[8]=2

a[9]=3

a[10]=99

由小到大的顺序为:

1,2,3,4,5,6,7,8,9,99。

冒泡排序算法的原理如下:

1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。

2、对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

3、针对所有的元素重复以上的步骤,除了最后一个。

4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

扩展资料:

冒泡排序的思想:

首先,从表头开始往后扫描数组,在扫描过程中逐对比较相领两个元素的大小。若相邻两个元素中,前面的元素大于后面的元素,则将它们互换, 称之为清去了一个逆序。

在扫描过程中,不断地将两相邻元素中的大者往后移动,最后就将数组中的最大者换到了表的最后,这正是数组中最大元素应有的位置。

然后,在剩下的数组元素中(n-1个元素)重复上面的过程,将次小元素放到倒数第2个位置。不断重复上述过程,直到剩下的数组元素为0为止,此时的数组就变为了有序。

假设数组元素的个数为西,在最坏情况下需要的比较总次数为: (n-1)+(n- 2)...+2+1)- n(n-1)/2。

参考资料来源:百度百科-冒泡排序



1、首先打开一个空白的C语言文件,首先先定义一组待排序的数列以及各个变量,接着就是用来处理排序的逻辑:

2、冒泡排序的逻辑是一组数从第一个数值开始,如果相邻两个数的排列顺序与期望不同,则将两个数的位置进行交换,重复这样的过程直到最后一个数不需要交换则排序完成,如果有N个数需要排序,则需要进行(N-1)趟的比较:

3、最后编译运行程序,观察最终排序的结果,可以看到数字被从小到大的排列好了,以上就是C语言冒泡排序实现的过程:



程序如下:

#include <stdio.h>

int main ()

{

int a[10];

int i, j, t;

printf ("请输入十个数:
");

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

{

printf ("a[%d]=", i+1);

scanf ("%d",&a[i]);

}

for (j = 0;j < 9; j++)

for (i = 0; i < 9 - j; i++)

if (a[i] > a[i+1])

{

t = a[i];

a[i] = a[i+1];

a[i+1] = t;

}

printf ("由小到大的顺序为:
");

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

{

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

}

printf ("
");

return 0;

运行结果

请输入十个数:

a[1]=7

a[2]=8

a[3]=9

a[4]=6

a[5]=5

a[6]=4

a[7]=1

a[8]=2

a[9]=3

a[10]=99

由小到大的顺序为:

1,2,3,4,5,6,7,8,9,99。

扩展资料

//从头向尾遍历,将最大数(相对)沉入尾部(相对)

void BubbleSort1(int *arr,int sz){

int i = 0;

int j = 0;

assert(arr);

for(i=0;i<sz-1;i++){

for(j=0;j<sz-i-1;j++){

if(arr[j]>arr[j+1]){

int tmp = arr[j];

arr[j] = arr[j+1];

arr[j+1] = tmp;

}

}

}

//从尾向头遍历,将最大数(相对)冒泡到头部(相对)

void BubbleSort2(int *arr,int sz){

int i = 0;

int j = 0;

assert(arr);

for(i=0;i<sz-1;i++){

for(j=sz;j>i;j--){

if(arr[j]>arr[j-1]){

int tmp = arr[j];

arr[j] = arr[j-1];

arr[j-1] = tmp;

}

}

}

}

参考资料来源:百度百科 - 冒泡排序



冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。

它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

参考代码:

#include <stdio.h>
#include<stdlib.h>
int main()

int a[5],i,j;
for(i=0;i<5;i++)
scanf("%d",&a[i]);
for(i=0;i<4;i++)
for(j=0;j<3-i;j++)
if(a[j]>a[j+1]){
a[j]=a[j]+a[j+1];
a[j+1]=a[j]-a[j+1];
a[j]=a[j]-a[j+1];
}
for(i=0;i<5;i++)
printf("%d ",a[i]);
return 0; 
}
/*
5 42 165 1 9
1 5 42 165 9
*/


#include <stdio.h>
void main()
{
//用指针实现10个数的冒泡排序(从小到大)
int i,j,*p,temp,arr[10];
p=arr;
printf("请输入10个数字:");
for(i=0;i<=9;i++)
scanf("%d",p+i);
printf("你输入的数字为:");
for(i=0;i<=9;i++)
printf("%d ",*(p+i));
printf("\n");
for(i=0;i<=9;i++)
for(j=0;j<=9-i;j++)
if(*(p+j)>*(p+j+1))
{
temp=*(p+j+1);
*(p+j+1)=*(p+j);
*(p+j)=temp;
}
printf("排序后的数字为:");
for(i=0;i<=9;i++)
printf("%d ",*(p+i));
printf("\n");
}

用C++语言编写程序实现:设计一个函数模板,实现用冒泡法对10 个某类型...
冒泡排序算法的运作如下:1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。3、针对所有的元素重复以上的步骤,除了最后一个。4、持续每次对越来越少的元素重复上面的步骤,直到...

C语言编程排序问题(冒泡法)
正确的程序如下:正确的程序如下:include "stdio.h"void main(){ int i,j,t,a[8];\/*变量K没用*\/ for(i=0;i<8;i++)scanf("%d",&a[i]);\/*%d后不能加空格*\/ for(j=1;j<8;j++)\/*此处你用的变量t和下面换位的t产生冲突*\/ { for(i=0;i<8-j;i++)\/*for循环后不能加...

编写一个程序,要求从键盘输入10个整数,然后采用冒泡排序法,按降序排序...
要编写一个程序,实现从键盘输入10个整数并采用冒泡排序法进行降序排列,程序步骤如下:首先,创建一个长度为10的整数数组a[]。用户通过键盘输入这10个初始数值。排序过程从第一个元素开始,每次比较相邻的两个数,如果当前的数小于后一个数,就进行交换,因为目标是降序排列。对于每一个位置的数,需要...

编写一个程序,要求从键盘输入10个整数,然后采用冒泡排序法,按降序排序...
采用冒泡法降序排列10个输入数据的程序如下:先定义一个长度为10的数组a[],10个数据由键盘输入,从第一个数开始,两两一组进行判断,因为要求是降序排列,因此将两个数中小的向后移动,每个数要比较的次数为9-数的下标。比较完成后将数组依次输出。输入10个数据,程序运行结果:...

编写JAVA程序,用冒泡法对十个随机数由小到大顺序排序,输出排序后的结果...
冒泡排序 j的范围:排出9个也就都出来了 k的范围:前一个与后一个比较选出大的,因为最大就是number.length \/ int b;for (int j = 0; j < number.length - 1; j++) { \/\/ for (int k = 0; k < number.length - 1; k++) { 使得排序运行81次 for (int k = 0; k < ...

c语言 用冒泡法对十个整数按升序排序
include<stdio.h>int main(void){int a[10];int i,j,k,max;printf("int the number:"); for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=0;i<10;i++){k=i;for(j=i;j<10;j++)if(a[k]<a[j]){max=a[j];a[j]=a[i];a[i]=max;}}for(i=0;i<10;i++)printf(...

C语言程序题:用冒泡排序法对10个整数按照由小到大的顺序进行排序
include "stdio.h"void main(){ int a[10];printf("Input 10 numbers!");printf("\\n");for(int i=0; i<10; i++){ scanf("%d",&a[i]);} printf("The result:");for(i=9; i>0; i--){ for(int j=0; j a[j+1]){ int temp = a[j];a[j] = a[j+1];a[j+1...

...任意打出来并存储在数组里。用C语言程序进行编写!求解.
h> main(){ int a[20];int i,j,t;for(i=0;i<20;i++)scanf("%d",&a[i]);for(i=0;i<19;i++)for(j=i+1;j<20;j++)if(a[i]>a[j]){ t=a[j];a[j]=a[i];a[i]=t;} for(i=0;i<20;i++)printf("%d ",a[i]);printf("\\n");} 从小到大排序 ...

数据结构C语言版冒泡排序的程序和应用,谁能帮我写一个。
这是一个C语言实现的冒泡排序程序,用于对数组中的数据进行排序。以下是程序代码:首先,定义一个数组a,大小为10,用于存放数据。通过for循环,输入10个数据到数组中。接着,使用冒泡排序算法对数组进行排序。通过两层for循环,外层循环控制比较的轮数,内层循环控制每一轮比较的元素。在内层循环中,如果...

c语言实现:使用冒泡排序,从小到大排列,输出每一趟排序后的结果以及总...
include<stdio.h>int main(){ int num=6,tep,sum=0; int a[6]= {2,1,10,8,7,6}; int i,j; printf("原数组:"); for(int p=0; p<num; p++) printf("%d ",a[p]); puts(""); for(i=0; i<num-1; i++) { for(j=0; j<num-i; ...