## C语言数据结构-折半查找

```#include<stdio.h>
#include<stdlib.h>

#define MAX_SIZE 101
#define SWAP(x, y, t)((t) = (x), (x) = (y), (y) = t)
#define COMPARE(x, y)((x) < (y)) ? -1 : ((x) == (y)) ? 0 : 1;

void sort(int [], int);
int binsearch(int list[], int searchnum, int left, int right) {
int middle;
int key;
if(left <= right) {
middle = (left + right) /2;
key = COMPARE(list[middle], searchnum);
if(key == -1) {
return binsearch(list, searchnum, middle + 1, right);
} else if(key == 0) {
return middle;
} else if(key == 1) {
return binsearch(list, searchnum, left, middle -1);
}
}
return -1;
}

void perm(char *list, int i, int n) {
int j, temp;
if(i == n) {
for(j = 0; j <= n; j++) {
printf("%c", list[j]);
}
printf("   ");
} else {
for(j = i; j <=  n; j++) {
SWAP(list[i], list[j], temp);
perm(list, i + 1, n);
SWAP(list[i], list[j], temp);
}
}
printf("\n");
}
int main() {
int i, n = 10;
int list[MAX_SIZE];

for(i = 0; i < n; i++) {
list[i] = rand() % 1000;
printf("%d\n", list[i]);
}

printf("*******************\n");

sort(list, n);
for(i = 0; i < n; i++) {
printf("%d\n", list[i]);
}

int result = binsearch(list, list[2], 0, n);
printf("result = %d\n", result);
printf("*******************\n");

char a[] = {'a', 'b', 'c'};
perm(a, 0, 2);
return 1;
}

void sort(int list[], int n){
int i, j, min, temp;
for(i = 0; i < n -1; i++) {
min = i;
for(j = i + 1; j < n; j++) {
if(list[j] < list[min]) {
min = j;
}
}
SWAP(list[i], list[min], temp);
}
}
```