2018年第九届蓝桥杯【C++省赛B组】【第五题:快速排序】
2018-04-03 07:48
447 查看
第五题
标题:快速排序。
以下代码可以从数组a[]中找出第k小的元素。
它使用了类似快速排序中的分治算法,期望时间复杂度是O(N)的。
请仔细阅读分析源码,填写划线部分缺失的内容。
#include <stdio.h> 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; }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
注意:只填写划线部分缺少的代码,不要抄写已经存在的代码或符号。
解题思路:
注意一下题目要求的是时间复杂度是要O(n)的时间复杂度,所以运行结果正确的话答案也不一定正确。
答案: a, i+1, r, k-(i-l+1)
本文转载:https://blog.csdn.net/qq_34202873/article/details/79784629相关文章推荐
- 2018年第九届蓝桥杯【C++省赛B组】【第五题:快速排序】
- 2018年第九届蓝桥杯【C++省赛B组】【第四题:测试次数】
- 2018年第九届蓝桥杯【C++省赛B组】【第一题:第几天】
- 2018年第九届蓝桥杯C/C++省赛A组题解
- 第七届 蓝桥杯 c/c++ B组 省赛 (4)——快速排序
- 2018年第九届蓝桥杯【C++省赛B组】【第二题:明码】——附解题代码
- 2018年第九届蓝桥杯【C++省赛B组】【第三题:乘积尾零】——附解题代码
- 2018年第九届蓝桥杯省赛B组C/C++部分答案
- 2018年第九届蓝桥杯大赛软件类省赛C/C++B组参赛感想
- 2018年第九届蓝桥杯【C++省赛B组】【第二题:明码】
- 2018年第九届蓝桥杯【C++省赛B组】【第三题:乘积尾零】
- 【快速排序】(2016)第七届蓝桥杯省赛 C/C++ A组 题解(第四题)
- 2018省赛第九届蓝桥杯真题C语言B组第五题题解 快速排序
- 蓝桥杯 第七届省赛--快速排序
- 2016第七届蓝桥杯C/C++ B组省赛第五题:抽签
- 2018年第九届蓝桥杯C++组B组第二题——明码
- 蓝桥杯-【抽签】【2016年省赛B组题解】【C++】——快速解法
- 2018第九届蓝桥杯C++省赛B组[最新题解汇总]
- 2018年4月1日省赛第九届蓝桥杯真题c,c++(B组)
- 第八届蓝桥杯c++大学A组(省赛)——第五题