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 }

 

你可能感兴趣的:(选择排序)