冒泡、二分排序

 1 #include<stdio.h>

 2 

 3 void main()

 4 {

 5     int a[10] = {0};

 6     int i,j,t;

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

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

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

10     }

11     printf("\n");

12     

13     for (j = 0; j < 9; j++) {

14         for (i = 0; i < 9 - j; i++) {

15             if (a[i] > a[i+1]) {

16                 t = a[i];

17                 a[i] = a[i+1];

18                 a[i+1] = t;

19             }

20         }    

21     }

22     printf("The sorted numbers are:\n");

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

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

25     }

26     printf("\n");

27 }

以上是冒泡排序,前提没有要求,测试的数据可以无序。

而二分法一般要求测试数据先排好序,一般是用于插入或查找一个数据。最后如果出现low > high就Over。

二分法如下:

 1 #include<stdio.h>

 2 

 3 int main()

 4 {

 5     int a[10] = {-12, 0, 6, 16, 23, 56, 80, 100, 110, 115};

 6     int n, low, high, mid, found;

 7     low = 0;

 8     high = 9;

 9     found = 0;

10     printf("Input a number to be searched:");

11     scanf("%d", &n);

12     

13     while (low <= high) {

14         mid = (low + high)/2;

15         if (n == a[mid]) {

16             found = 1;

17             break;

18         }

19         else if (n > a[mid]) {

20             low = mid + 1;

21         }

22         else {

23             high = mid - 1;

24         }

25     }

26     

27     if (1 == found) {

28         printf("The index of %d is %d\n", n, mid);

29     }

30     else {

31         printf("There's no %d\n", n);

32     }

33     

34     return 0;

35 }

 

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