折半查找
//while循环中使用了两次
int binsearch(int x, int v[], int n) {
int low, high, mid;
low = 0;
high = n - 1;
while(low <= high) {
mid = (low + high) / 2;
if(v[mid] == x) {
return mid;
} else if (x < v[mid]) {
high = mid - 1;
} else {
low = mid + 1;
}
}
return -1;
}
快速排序
/*
* 快速排序:对于一个给定的数组,从中选择一个元素,以该元素为界将其余的元素划分为两个子集
*,一个子集中的所有元素小于这个数,另一个子集中的元素都大于或者等于这个数,当某一个子集的个数小于2,
*就不需要再次排序
*/
void quicksort(int v[], int left, int right) {
int i, last;
void swap(int v[], int i, int j);
if(left >= right) {
return;
}
swap(v, left, (left + right) / 2);
last = left;
for(i = left + 1; i <= right; i++) {
if(v[i] < v[left]) {
swap(v, ++last, i);
}
}
swap(v, left, last);
quicksort(v, left, last - 1);
quicksort(v, last + 1, right);
}