zoukankan      html  css  js  c++  java
  • 每天一道算法题(32)——输出数组中第k小的数

    1.题目

         快速输出第K小的数

    2.思路

        使用快速排序的思想,递归求解。若键值位置i与k相等,返回。若大于k,则在[start,i-1]中寻找第k大的数。若小于k。则在[i+1,end]中寻找第k+start-i-1小的数。

    3.代码

    #include<iostream>
    #include<string>
    using namespace std;
    int choose(int* data,int start,int end,int k){
    	if(start==end)
    		return data[start];
    	int temp=data[start];
    	int i=start;
    	int j=end;
    	while(i<j){//类似于快速排序的方法。
    		while(i<j&&data[j]>=temp)
    			j--;
    		data[i]=data[j];
    		while(i<j&&data[i]<temp)
    			i++;
    		data[j]=data[i];
    	}
    	data[i]=temp;
    	if((i-start+1)==k)
    		return data[i];
    	else if((i-start+1)<k)
    		return choose(data,i+1,end,k+start-i-1);
    	else
    		return choose(data,start,i-1,k);
    }
    int main()
    {
    	int data[10]={7,4,3,2,1,10,6,5,8,9};
    	cout<<choose(data,0,9,8)<<endl;
    }



  • 相关阅读:
    java8知识总结_2.方法引用
    Shell三剑客_1.grep
    java8知识总结_1.Lambda表达式
    javascript中的设计模式
    javascript入门学习
    css3新特性
    Html5新增了什么
    什么是Node.js
    vue项目搭建
    Git使用
  • 原文地址:https://www.cnblogs.com/engineerLF/p/5392985.html
Copyright © 2011-2022 走看看