#include
#include
void my_printf(int a[], int e)
{
for (int i = 0; i < e; i++) {
printf("%d ", a[i]);
}
printf("\n");
}
void qsort(int a[], int s, int e)
{
if (e <= s) return;
int low = s;
int hight = e;
int key = a[s];
while (low < hight) {
while (hight > low && a[hight] > key)
hight--;
a[low] = a[hight];
while (low < hight && a[low] < key)
low++;
a[hight] = a[low];
}
a[low] = key;
qsort(a, s, low - 1);
qsort(a, low + 1, e);
}
int BinSearch(int a[], int s, int e, int k)
{
int low = s;
int hight = e;
int mid = -1;
while (low <= hight) {
if (a[low] == k) return low;
if (a[hight] == k) return hight;
mid = low + ((hight - low)/2);
if (a[mid] == k) return mid;
if (a[mid] < k) {
low = mid + 1;
} else {
hight = mid - 1;
}
}
return -1;
}
int main(int argc, char *argv[])
{
int a[] = {12,56, 11,44,78,90,22,31,29,89};
int aLen = sizeof(a)/sizeof(a[0]);
printf("Raw Arr[] = \t");
my_printf(a, aLen);
printf("qsort Arr[] = \t");
qsort(a, 0, aLen-1);
my_printf(a, aLen);
printf("\n");
int f = BinSearch(a, 0, aLen - 1, 44);
printf("44 index = %d\n", f);
f = BinSearch(a, 0, aLen - 1, 11);
printf("11 index = %d\n", f);
f = BinSearch(a, 0, aLen - 1, 10);
printf("10 index = %d\n", f);
f = BinSearch(a, 0, aLen - 1, 90);
printf("90 index = %d\n", f);
f = BinSearch(a, 0, aLen - 1, 100);
printf("100 index = %d\n", f);
f = BinSearch(a, 0, aLen - 1, 78);
printf("78 index = %d\n", f);
return 0;
}
输出结果:
Raw Arr[] = 12 56 11 44 78 90 22 31 29 89
qsort Arr[] = 11 12 22 29 31 44 56 78 89 90
44 index = 5
11 index = 0
10 index = -1
90 index = 9
100 index = -1
78 index = 7