#include <stdio.h> #include <stdlib.h> //冒泡排序 void sort(int arr[], int len) { int i,j; for(i=0; i<len; i++) { for(j=0; j<len-i-1; j++) { if(arr[j]>arr[j+1]) { int temp; temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } } void print(int arr[], int len) { int i; for(i=0; i<len; i++) { printf("%d ",arr[i]); } printf("/n"); } void input(int arr[],int len) { printf("Please enter %d numbers: /n", len); int i; for(i=0; i<len; i++) { scanf("%d",&arr[i]); } return arr; } /* 对有序数组进行二分查找 先计算middle的值,理论上将有序数组分成两部分 然后取出位于middle-1位置的数据,与num比较 如果相等则返回当前下标 如果大于则将第二部分的有序数组重新分成两部分 小于则将第一部分的有序数组重新分成两部分 */ int BinarySearch(int arr[], int len, int num) { int middle = (len+1)/2; while(1) { if(middle > len) break; if(num == arr[middle-1]) return middle; else if(num > arr[middle-1]) middle += (len-middle)/2 + 1; else { len = middle-1; middle = (len+1)/2; } } return -1; } int main() { int len; printf("Please a length: "); scanf("%d", &len); int arr[len]; //输入数据 input(arr, len); //对数据进行排序 sort(arr, len); //输出排好序的数据 printf("The sorted numbers: /n"); print(arr, len); printf("Please enter a number: "); int num; scanf("%d", &num); //查找数据 int result = BinarySearch(arr, len, num); if(result != -1) printf("Got it at %d.", result); else printf("Sorry, there's no such number."); return 0; }