当前位置:首页 » 编程语言 » 冒泡排序c语言学习
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

冒泡排序c语言学习

发布时间: 2023-06-17 15:08:17

c语言冒泡排序


冒泡排序基本思慧正想
将n个记录看作按纵向排列,每趟排序时自下至上对每对相邻记录进行比较,脊颂若次序不符合要求(逆序)就交换。每趟排序结束时都能使排序范围内关键字最小的记录象一个气泡一样升到表上端的对应位置,整个排序过程共进行n-1趟,依次将关键字最小、次小、第三小的各个记录“冒到”表的第一个、第二个、第三个位置上。
初态 第1趟 第2趟 第3趟樱碧郑 第4趟 第5趟 第6趟 第7趟
38
12
12
12
12
12
12
12
20
38
20
20
20
20
20
20
46
20
38
25
25
25
25
25
38
46
25
38
38
38
38
38
74
38
46
38
38
38
38
38
91
74
38
46
46
46
46
46
12
91
74
74
74
74
74
74
25
25
91
91
91
91
91
91
/*
Title: 冒泡排序
Author: Li Aimin
Date: May 2007
算法功能:冒泡排序算法实现将一个长度为n的线性表r上的所有元素按关键字升序排列。
*/
#includestdio.h
void bubblesort(int r[],int n)
{ /*elements are stored in r[1] to r[n]*/
int i,j,flag;
int temp;
flag=1;
i=1;
while((in)(flag==1)) /*外循环控制排序的总趟数*/
{ flag=0;
for(j=n;ji;j--) /*内循环控制一趟排序的进行*/
if(r[j]r[j-1]) /*相邻元素进行比较,若逆序就交换*/
{
flag=1;
temp=r[j];
r[j]=r[j-1];
r[j-1]=temp;
}
i++;
}
} /*bubblesort*/
void show(int r[] , int n)
{
/*elements are stored in r[1] to r[n]*/
int i;
for(i=1;i=n;i++)
printf(" %d ",r[i]);
printf(" ");
}
void main()
{
int a[9201],i;
for(i=0;i9201;i++)
a[i]=9201-i;
//show(a,100000);
bubblesort(a,9200);
show(a,9200);
}

❷ 如何用c语言编写冒泡排序的程序

对拥有 n 个元素的数组 R[n] 进行 n-1 轮比较。

第一轮,逐个比较 (R[1], R[2]),  (R[2], R[3]),  (R[3], R[4]),  …….  (R[N-1], R[N]),最大的元素被移动到 R[n] 上。

第二轮,逐个比较 (R[1], R[2]),  (R[2], R[3]),  (R[3], R[4]),  …….  (R[N-2], R[N-1]),次大的元素神槐被移动到 R[n-1] 上。
。。。。枯羡。。
以此类推,直到整个数组从小到大排序。

具体的代码实现如下所示游败友:
#include <stdio.h>

int main(){

int nums[10] = {4, 5, 2, 10, 7, 1, 8, 3, 6, 9};

int i, j, temp;

//冒泡排序算法:进行 n-1 轮比较

for(i=0; i<10-1; i++){
//每一轮比较前 n-1-i 个,也就是说,已经排序好的最后 i 个不用比较

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

if(nums[j] > nums[j+1]){
temp = nums[j];

nums[j] = nums[j+1];
nums[j+1] = temp;
}
}
}

//输出排序后的数组

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

printf("%d ", nums[i]);
}

printf("\n");

return 0;
}

❸ 用c语言编写冒泡排序算法

#include<stdio.h>
void main(){
int i,j,score[10],count=0,temp,sum=0;
double avg;
for(i=0;i<10;i++){ //输入10个学生的成绩,并求着10个或则学生的成绩总和
printf("请输入第%d个学生的成绩:",(i+1));
scanf("%d",&score[i]);
sum+=score[i];
}
avg=sum*1.0/10; //求着这10个粗好学生成绩的平均值
for(i=0;i<10;i++){ //统计小于平均分的学生人数
if(score[i]<avg){
count++;
}
}
for(i=0;i<10;i++){ //使用冒泡排序对这衫凳棚10个学生的成绩逆序排序
for(j=0;j<9-i;j++){
if(score[j]<score[j+1]){
temp=score[j];
score[j]=score[j+1];
score[j+1]=temp;
}
}
}
printf("最高成绩:%d分,平均成绩:%.2f分,低于平均成绩的人数是:%d人!\n",score[0],avg,count);
}

❹ C语言冒泡排序(数组)

按照你的要求编写的C语言冒泡排序的程序如下

#include<stdio.h>

intmain(){

inti,j,k,T,n,tmp;

scanf("%d",&T);

for(i=0;i<T;i++){

码运虚scanf("%d",&n);

inta[n];

for(j=0;j<n;j++){

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

}

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

for(k=0;k<n-1-j;k++){

if(a[k]>a[k+1]){

tmp=a[k];

a[k]=a[k+1];

a[k+1]=tmp;

}

}

for(k=0;k<n;k++){

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

}

printf(" ");

}

}

return0;

}


运行结果
输入2
输入51044312
输出
4101243
4121043
1241043
1241043
输入10201231224345424523-10
输出
201221235424523-10434
122205424523-10123434
2122024523-1054123434
21222023-104554123434
221220-10234554123434
2212-1020234554123434
22-101220234554123迟燃434
2-1021220234554123悄嫌434
-10221220234554123434

❺ c语言冒泡排序是什么

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。
它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。

算法原理编辑
冒泡排序算法的运作如下:(从后往前)

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

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

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

持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较
#include<stdio.h>
#define SIZE 8

voidbubble_sort(inta[],intn);

voidbubble_sort(inta[],intn)//n为数组a的元素个数
{
inti,j,temp;
for(j=0;j<n-1;j++)
for(i=0;i<n-1-j;i++)
{
if(a[i]>a[i+1])//数组元素大小按升序排列
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
}
intmain()
{
intnumber[SIZE]={95,45,15,78,84,51,24,12};
inti;
bubble_sort(number,SIZE);
for(i=0;i<SIZE;i++)
{
printf("%d",number[i]);
}
printf("\n");
}

❻ C语言冒泡排序法是怎么排序的

C语言冒泡排序法的排序规则:

将被排序的记录数组R[1..n]垂直排列,每个记录R看作是重量为R.key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上"飘浮"。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。

  1. 初始 R[1..n]为无序区。

  2. 第一趟扫描 从无序区底部向上依次比较相邻的两个气泡的重量,若发现轻者在下、重者在上,则交换二者的位置。

    即依次比较(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]上。

  3. 第二趟扫描 扫描R[2..n]。

    扫描完毕时,"次轻"的气泡飘浮到R[2]的位置上…… 最后,经过n-1 趟扫描可得到有序区R[1..n] 注意: 第i趟扫描时,R[1..i-1]和R[i..n]分别为当前的有序区和无序区。扫描仍是从无序区底部向上直至该区顶部。扫描完毕时,该区中最轻气泡飘浮到顶部位置R上,结果是R[1..i]变为新的有序区。

❼ 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

到此第一趟排序结束,接下来的每一趟排序都是这样。

#include<stdio.h>
voidPrint(int*num,intn)
{
inti;
for(i=0;i<n;i++)
printf("%d",num[i]);
puts(" ");
return;
}
voidBubble_Sort(int*num,intn)
{
inti,j;
for(i=0;i<n;i++)
{
for(j=0;i+j<n-1;j++)
{
if(num[j]>num[j+1])
{
inttemp=num[j];
num[j]=num[j+1];
num[j+1]=temp;
}
Print(num,n);
}
}
return;
}
intmain()
{
intnum[8]={87,12,56,45,78};
Bubble_Sort(num,5);
return0;
}

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

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

❾ c语言怎么做冒泡排序啊

使用冒泡排序法进行编程:

解释:

1.第一个for循环:利用数组循环输入4个变量。

2.第二个for循环:该循环的意思是如果a[0]>a[1]的话,两个变量的值交换,利用循环依次比较。要注意的是i<3,因为其中有i+1,i最大取到2,也就闷渣是i+1最大取到3才正确。

3.第三个for循环:利用循环依次输出蚂渣悄排序后的数组,每输出一个加一个空格以便于区分。

(9)冒泡排序c语言学习扩展阅读:

冒泡排序法,从数组头部开始,不断比较相邻的两个元素的大小,通过交换两个元素的值使较大的元素逐渐往后移动,直到数组的末尾。

经过第一轮的比较,就可以找到最大的元素,并将它移动梁燃到最后一个位置。第一轮结束后,继续第二轮。仍然从数组头部开始比较,让较大的元素逐渐往后移动,直到数组的倒数第二个元素为止。

经过第二轮的比较,就可以找到次大的元素,并将它放到倒数第二个位置。

以此类推,进行 n-1(n 为数组长度)轮“冒泡”后,就可以将所有的元素都排列好。

❿ c语言三种排序

常用的c语言排序算法主要有三种即冒泡法排序、选择法排序、插入法排序

一、冒泡排序冒泡排序:

是从第一个数开始,依次往后比较,在满足判断条件下进行交换。代码实现(以降序排序为例)

#include<stdio.h>

int main()

{

int array[10] = { 6,9,7,8,5,3,4,0,1,2 };

int temp;

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

{//循环次数

for (int j = 0; j <10 - i-1; j++)

{

if (array[j] < array[j+1])

{//前面一个数比后面的数大时发生交换 temp = array[j];

array[j] = array[j+1];

array[j + 1] = temp;

}

}

} //打印数组 for (int i = 0; i < 10; i++) printf("%2d", array[i]); return 0;}}

二、选择排序以升序排序为例:

就是在指定下标的数组元素往后(指定下标的元素往往是从第一个元素开始,然后依次往后),找出除指定下标元素外的值与指定元素进行对比,满足条件就进行交换。与冒泡排序的区别可以理解为冒泡排序是相邻的两个值对比,而选择排序是遍历数组,找出数组元素与指定的数组元素进行对比。(以升序为例)

#include<stdio.h>

int main()

{

int array[10] = { 6,9,7,8,5,3,4,0,1,2 };

int temp, index;

for (int i = 0; i < 9; i++) {

index = i;

for (int j = i; j < 10; j++)

{

if (array[j] < array[index])

index = j;

}

if(i != index)

{

temp = array[i];

array[i] = array[index];

array[index] = temp;

}

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

printf("%2d"array[i])

return 0;

}

三、快速排序

是通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

void QuickSort(int* arr, int size)

{

int temp, i, j;

for(i = 1; i <size; i++)

for(j=i; j>0; j--)

{

if(arr[j] <arr[j-1])

{

temp = arr[j];

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

arr[j-1]=temp;

}

}

}