c - 冒泡/选择排序.

 1 #include <stdio.h>
 2 
 3 #define LEN 10
 4 #define TRUE 1
 5 #define FALSE 0
 6 
 7 /*
 8 对 10 个数进行排序
 9 */
10 //选择排序法(值得注意的是,直接选择排序和冒泡排序不同,如果某一趟没有交互操作,并不代表已排好序,故不能标识).
11 void
12 select_sort(int *a) {
13     int tmp;    //作为两个数交换的临时变量.
14     for(int i = 0; i < LEN - 1; i++) {
15         for(int j = i + 1; j < LEN; j++) {
16             if(a[i] > a[j]) {
17                 tmp = a[i];
18                 a[i] = a[j];
19                 a[j] = tmp;
20             }
21         }
22     }
23 }
24 
25 //冒泡排序.
26 void
27 bubble_sort(int *a) {
28     int tmp;
29     int swap;    //标识某趟排序是否有交互操作,若无,则说明已排好序.
30     for(int i = 0; i < LEN -1; i++) {
31         swap = FALSE;    
32         for(int j = 0; j < LEN - 1 - i; j++) {
33             if(a[j] > a[j + 1]) {
34                 tmp = a[j];
35                 a[j] = a[j + 1];
36                 a[j + 1] = tmp;
37                 swap = TRUE;
38             }
39         }
40         if(!swap)    //如果已排好序,则不用继续循环.
41             break;
42     }
43 }
44 
45 void 
46 show(int *a) {
47     for(int i = 0; i < LEN; i++)
48         printf("%d ", a[i]);
49     printf("\n");
50 }
51 int
52 main(void) {
53     //10个数.
54     int a[] = {-1, -7, 8, 2, 7, 321, 3, 9, 11, 17};
55     show(a);
56     select_sort(a);
57     //bubble_sort(a);
58     show(a);
59     printf("\n");
60 }

 

posted @ 2014-10-19 11:07  wonkju  阅读(186)  评论(0)    收藏  举报