演算法導論筆記 快速排序 隨機數優化版

2021-09-13 18:42:50 字數 1330 閱讀 3611

/*公升序快排(隨機數版)*/

int partition(int *arr, int l, int r)

arr[i] = x; //i即為中點

return i;

}/*輔助函式*/

void quick_sort(int *arr, int l, int r)

}

/*降序快排(隨機數版)*/

int partition(int *arr, int l, int r)

arr[i] = x; //i即為中點

return i;

}/*輔助函式*/

void quick_sort(int *arr, int l, int r)

}

/*

第k大數(隨機數版)

*/int partition(int *arr, int l, int r, int k)

arr[i] = x; //i即為中點

if (i - l + 1 == k) return arr[i]; //第k大數

/*第k大數在i的右邊*/

else if (i - l + 1 < k) return partition(arr, i + 1, r, k - (i - l + 1));

/*第k大數在i的左邊*/

else return partition(arr, l, i - 1, k);}/*

/*第k大數(以第乙個元素為基準)*/

int partition(int *arr, int l, int r, int k)

arr[i] = x; //i即為中點

if (i - l + 1 == k) return arr[i];

else if (i - l + 1 < k) return partition(arr, i + 1, r, k - (i - l + 1));

else return partition(arr, l, i - 1, k);}*/

/*第k小數,以第乙個元素為基準*/

int partition(int *arr, int l, int r, int k)

arr[i] = x; //i即為中點

if (i - l + 1 == k) return arr[i];

else if (i - l + 1 < k) return partition(arr, i + 1, r, k - (i - l + 1));

else return partition(arr, l, i - 1, k);

}

演算法導論 快速排序優化演算法!

常見快速排序 時間複雜度最好情況下o nlgn 最壞情況o n2 快速排序是基於分治模式的 分解 陣列a p.r 被劃分成兩個 可能空 子陣列a p.q 1 和a q 1.r 使得a p.q 1 中的每個元素都小於等於a q 而且,小於等於a q 1.r 中的元素。下 標q 也在返個劃分過程中迕行計...

演算法 隨機數

include include include 功能,隨機生成n個隨機數,並按公升序排序 int main void printf 從小到大排列為 n for i 0 i for i 0 i printf 4d arr i return0 這裡生成隨機數的關鍵 includesrand unsign...

演算法導論學習筆記(一)快速排序及優化

快排的偽 quick sort a,p,r 初始呼叫傳入的引數是quick sort a,1,a.length partition的偽 partition a,p,r 演算法維持幾個指標變數,p和r分別指向陣列的首尾元素,i為比基準元素x小的最後乙個元素,j為比基準元素大的最後乙個元素的下乙個。也就...