「C語言」「算法」數組的多種排序方法,c語言數組排序算法

![]()
1 #include<stdio.h>
2 #define N 10
3
4 //數組的冒泡排序
5
6 int main(){
7 int i,j;
8 int a[10]={48,62,35,77,55,14,35,98,22,40};
9 for(i=0;i<10;i++){
10 for(j=0;j<10-i-1;j++)
11 if(a[j]>a[j+1])
12 {
13 a[j]^=a[j+1];
14 a[j+1]^=a[j];
15 a[j]^=a[j+1];
16 }
17 }
18 printf("after:\n");
19 for(i=0;i<10;i++) printf("%d ",a[i]);
20 return 0;
21 }
冒泡排序(固定最大值到循環末位)

![]()
1 #include<stdio.h>
2 #define N 10
3
4 //函數調用加找最小值放循環首位
5
6 void sort(int b[]){
7 int i,j;
8 for(i=0;i<N;i++){
9 for(j=i+1;j<N;j++){
10 if(b[i]>b[j]){
11 b[i]^=b[j];
12 b[j]^=b[i];
13 b[i]^=b[j];
14 }
15 }
16 }
17 }
18
19 int main() {
20 int a[N];
21 int i,j;
22 printf("input:\n");
23 for(i=0;i<N;i++){
24 scanf("%d",&a[i]);
25 }
26 printf("before:\n");
27 for(i=0;i<N;i++){
28 printf("%d ",a[i]);
29 }
30 printf("\n");
31 sort(a);
32 printf("after:\n");
33 for(i=0;i<N;i++){
34 printf("%d ",a[i]);
35 }
36 return 0;
37 }
找最小值放循環首位

![]()
1 #include <stdio.h>
2
3 //輸入10個學生高考數學(分數為0到100的整數)成績,利用統計各分數出現次數來對這10名學生高考數學成績排序
4
5 int main(){
6 int i,k=0,j=0;
7 int a[10];/* 保存10名學生成績 */
8 int b[101];/* 數學成績的取值有101種 */
9 printf("請輸入10個整數成績:\n");
10 for(i=0;i<10;i++)
11 scanf("%d",&a[i]);
12 for(i=0;i<101;i++)
13 b[i]=0;/* 數學成績取值情況初始化為0 */
14 for(i=0;i<10;i++)
15 b[a[i]]++;
16 /* 更新排序結果到a[]中 */
17 for(i=0;i<101;i++)
18 {
19 if(b[i]!=0)
20 {
21 for(k=0;k<b[i];k++)/* 將重復成績按照統計出現的次數輸出 */
22 {
23 a[j]=i;
24 j++;
25 }
26 }
27 }
28 printf("排序結果:\n");
29 for(i=0;i<10;i++)
30 printf("%d ",a[i]);
31 return 0;
32 }
利用其他數組統計各數值出現次數排序