折半查找
//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);
}