C语言中选择排序法和冒泡排序法代码。

C语言中选择排序法和冒泡排序法代码。,第1张

选择排序:

void select_sort(int a[],int n)        //传入数组的要排序的元素个数

{int i,j,min,t;

for(i=0;i<n-1;i++)

{  min=i;      //min:当前最小值下标

for(j=i+1;j<n;j++)        //扫描余下的部分

if(a[min]>a[j])        //若有其它元素更小,就记录其下标

min=j;

if(min!=i)        //保若最小值不在排序区首位,就换到首位

{t=a[min]; a[min]=a[i]; a[i]=t;}

}

}

冒泡排序:

void bubble_sort(int a[], int n)        //传入数组的要排序的元素个数

{ int i, j, t;

for (j=0; j<n-1; j++)        //n个元素比较n-1轮

for (i= 0; i<n-1-j;i++)   //比较相信的两个数

if(a[i]>a[i+1])          //若大小顺序不符,就交换

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

}

程序如下:

#include <stdioh>

int main ()

{

int a[10];

int i, j, t;

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

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 ("由小到大的顺序为:\n");

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

{

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

}

printf ("\n");

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。

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

#include<stdioh>

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=sum10/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语言代码和运行结果如下:

可见成功按从大到小排序,望采纳~

附源码:

#include <stdioh>

void sort(int a[], int n) { 

    int i, j, t;

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

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

            if (a[j] < a[j + 1]) { // 将小数交换到后面

                t = a[j]; 

                a[j] = a[j + 1]; 

                a[j + 1] = t;

            }

    }

}

void display(int a[], int n) {

    int i;

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

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

    printf("\n");

}

int main() {

    int a[] = {1,3,2,8,0,6};

    int n = sizeof(a) / sizeof(a[0]);

    printf("从大到小冒泡排序:\n");

    sort(a, n);

    display(a, n);

    return 0;

}

#include <stdioh>

int main()

{

int a[6],i,j;

printf("请输入6个数字:\n");

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

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

for(i=0;i<5;i++)//冒泡。

{

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

{

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

{

int t=a[j];

a[j]=a[j+1];

a[j+1]=t;

}

}

}

printf("冒泡排序后:\n");

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

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

printf("\n");

return 0;

}

冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。

由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。

用二重循环实现,外循环变量设为i,内循环变量设为j。外循环重复9次,内循环依次重复9,8,,1次。每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,,9,对于每一个i,

j的值依次为1,2,10-i

冒泡法排序的原理是相邻的两个数进行比较,现在以“输入10个数,对它们按小到大的顺序排序”这道题,来展示冒泡法排序。

#include

int main(){

int a[10];

int i,j,t;

printf (" input 10 numbers: \n");

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

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

printf ("\n");

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("the sorted numbers: \n");

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

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

printf("\n");

return 0;

}

以上就是关于C语言中选择排序法和冒泡排序法代码。全部的内容,包括:C语言中选择排序法和冒泡排序法代码。、C语言:编写一个程序用冒泡排序实现升序排列、用c语言编写冒泡排序算法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9305888.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存