代码可在anycodes在线编译测试
#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;
}