zoukankan      html  css  js  c++  java
  • 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
    ", quick_select(a, 0, 14, 5));
    	return 0;
    }
    

     

    注意:只填写划线部分缺少的代码,不要抄写已经存在的代码或符号。
     
    解答
    a,i+1,r, k-(i-l+1)
  • 相关阅读:
    springMVC
    自动装配
    HTTP Status 500
    this compilation unit is not on the build of a java project
    Struct2提交表单数据到Acion
    ResultMap
    MyEclipse 代码自动提示
    xe mysql
    java Study 基础 1
    InterfaceConnect
  • 原文地址:https://www.cnblogs.com/candyYang/p/10520162.html
Copyright © 2011-2022 走看看