数组排序:冒泡法和选择法

1.冒泡法

假设有10个数

第1趟比较时,将10个数中最大的数沉到最底下,位于在a[10]的位置;

第2趟比较时,将剩下9个数中最大的数沉到最底下,位于在a[9]的位置;

……

依次类推,要往下沉9次,即进行9趟比较,才能将顺序排好。

趟数 i=n-1;

第1趟比较,需要进行9次两两比较,j=9;

第2趟比较,已有1个数位置固定,需要进行8次两两比较,j=8;

……

依次类推,需要第 i 趟比较,两两比较的次数为 j=9-i=n-1-i; 

 1 #include<stdio.h>
 2 
 3 void main()
 4 {
 5     setvbuf(stdout,NULL,_IONBF,0);
 6     int a[10];
 7     int i,j;
 8     int t;
 9 
10     printf("input 10 numbers:
");
11     for(i=0;i<10;i++)
12         scanf("%d",&a[i]);
13     printf("
");
14 
15     for(i=0;i<9;i++)            //进行n-1趟比较
16         for(j=0;j<9-i;j++)        //每趟比较中,有n-1-i次比较
17         {
18             if(a[j]>a[j+1])        //比较相邻两个数
19             {
20                 t = a[j];
21                 a[j] = a[j+1];
22                 a[j+1] = t;
23             }
24         }
25     printf("The sorted numbers:
");
26     for(i=0;i<10;i++)
27         printf("%d ",a[i]);
28     printf("
");
29 }
冒泡法

2.选择法

假设有10个数

先将10个数中最小的数与a[0]对换;

再将a[1]到a[9]中最小的数与a[1]对换;

……

每比较一轮,找出一个未经排序的数中最小的一个。共比较9轮。 

 1 #include<stdio.h>
 2 
 3 void main()
 4 {
 5     setvbuf(stdout,NULL,_IONBF,0);
 6     int a[10];
 7     int i,j;
 8     int min;
 9     int t;
10 
11     printf("input 10 numbers:
");
12     for(i=0;i<10;i++)
13         scanf("%d",&a[i]);
14     printf("
");
15 
16     for(i=0;i<9;i++)
17     {
18         //找出a[i]到a[n]中最小的那个数的编号min
19         min = i;
20         for(j=i+1;j<10;j++)
21             if(a[j]<a[min])
22                 min = j;
23         
24         //将最小的数a[min]与a[i]交换位置
25         t = a[min];
26         a[min] = a[i];
27         a[i] = t;
28     }
29     printf("The sorted numbers:
");
30     for(i=0;i<10;i++)
31         printf("%d ",a[i]);
32     printf("
");
33 }
选择法
原文地址:https://www.cnblogs.com/Camilo/p/3340392.html