日期:2014-05-16 浏览次数:20830 次
#include <stdio.h> #include <stdbool.h> bool binarySearch(int* a, int L, int N) { int fI = 0, lI = L-1, mI = 0; while(fI <= lI) { mI = (fI+lI) >> 1; if(N > *(a+mI)) fI = mI + 1; else if(N < *(a+mI)) lI = mI - 1; else return true; } return false; } bool search(int* a, int L, int N) { int i = 0; for (;i<L-1;i++) { if(binarySearch(a, L, N-(*(a+i)))) return true; } return false; } int binarySort(int* a, int fI, int lI, int N) { int mI = (fI+lI) >> 1; if (N > *(a+mI)) { fI = mI + 1; if(fI > lI) return mI+1; binarySort(a, fI, lI, N); } else if (N < *(a+mI)) { lI = mI - 1; if(fI > lI) return mI; binarySort(a, fI, lI, N); } else return mI+1; } void insertSort(int* a, int index, int N) { int key = *(a+index); if(index+1 <= N) { int i = binarySort(a, 0, index-1, key); int j = index-1; for (;j>=i;j--) { *(a+j+1) = *(a+j); } *(a+i) = key; insertSort(a, index+1, N); } return; } int main() { int a[10] = {212,343,534,2,3,67,34,78,90,32}; int L = sizeof(a)/sizeof(int); int i = 0; int x = 5360; insertSort(a, 1, L); for (;i<L;i++) printf("%d ",*(a+i)); printf("\n"); if(search(a, L, x)) printf("Yes! \n"); else printf("No! \n"); return 0; }