C積累

折半查找

//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);
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章