1 #include<stdio.h> 2 3 void main() 4 { 5 int a[10] = {0}; 6 int i,j,t; 7 printf("input 10 numbers: "); 8 for (i = 0; i < 10; i++) { 9 scanf("%d", &a[i]); 10 } 11 printf(" "); 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: "); 23 for (i = 0; i < 10; i++) { 24 printf("%d ", a[i]); 25 } 26 printf(" "); 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, mid); 29 } 30 else { 31 printf("There's no %d ", n); 32 } 33 34 return 0; 35 }