2018年第九届蓝桥杯 第五题:快速排序 (满分9分)
生活随笔
收集整理的這篇文章主要介紹了
2018年第九届蓝桥杯 第五题:快速排序 (满分9分)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
標題:快速排序。 以下代碼可以從數組a[]中找出第k小的元素。
它使用了類似快速排序中的分治算法,期望時間復雜度是O(N)的。
請仔細閱讀分析源碼,填寫劃線部分缺失的內容。 int quick_select(int a[], int l, int r, int k) {int p = rand() % (r - l + 1) + l;int x = a[p];{int t = a[p]; a[p] = a[r]; a[r] = t;}int i = l, j = r;while(i < j) {while(i < j && a[i] < x) i++;if(i < j) {a[j] = a[i];j--;}while(i < j && a[j] > x) j--;if(i < j) {a[i] = a[j];i++;}}a[i] = x;p = i;if(i - l + 1 == k) return a[i];if(i - l + 1 < k) return quick_select( _____________________________ ); //填空else return quick_select(a, l, i - 1, k); }int main() {int a[] = {1, 4, 2, 8, 5, 7, 23, 58, 16, 27, 55, 13, 26, 24, 12};printf("%d\n", quick_select(a, 0, 14, 5));return 0; }
它使用了類似快速排序中的分治算法,期望時間復雜度是O(N)的。
請仔細閱讀分析源碼,填寫劃線部分缺失的內容。 int quick_select(int a[], int l, int r, int k) {int p = rand() % (r - l + 1) + l;int x = a[p];{int t = a[p]; a[p] = a[r]; a[r] = t;}int i = l, j = r;while(i < j) {while(i < j && a[i] < x) i++;if(i < j) {a[j] = a[i];j--;}while(i < j && a[j] > x) j--;if(i < j) {a[i] = a[j];i++;}}a[i] = x;p = i;if(i - l + 1 == k) return a[i];if(i - l + 1 < k) return quick_select( _____________________________ ); //填空else return quick_select(a, l, i - 1, k); }int main() {int a[] = {1, 4, 2, 8, 5, 7, 23, 58, 16, 27, 55, 13, 26, 24, 12};printf("%d\n", quick_select(a, 0, 14, 5));return 0; }
注意:只填寫劃線部分缺少的代碼,不要抄寫已經存在的代碼或符號。 解答 a,i+1,r, k-(i-l+1)
轉載于:https://www.cnblogs.com/candyYang/p/10520162.html
總結
以上是生活随笔為你收集整理的2018年第九届蓝桥杯 第五题:快速排序 (满分9分)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IdentityServer4环境部署失
- 下一篇: 新的认识