zoukankan      html  css  js  c++  java
  • poj 4088:Set操作

    poj 4088:集合运算


    题目:(至于4089。那个问题做过。使用归并思想,所以没有写)

    描写叙述

    小张须要从一批数量庞大的正整数中挑选出第k小的数。由于数据量太庞大,挑选起来非常费劲,希望你能编程帮他进行挑选。

    输入
    第一行第一个是数据的个数n(10<=n<=106)。第二个是须要挑选出的数据的序号k(1<=k<=105),n和k以空格分隔;
    第二行以后是n个数据T(1<=T<=109),数据之间以空格或者换行符分隔。
    输出
    第k小数(假设有同样大小的也进行排序。比如对1,2,3,8,8。第4小的为8。第5小的也为8)。
    例子输入
    10 5
    1  3  8 20 2 
    9 10 12  8 9 
    例子输出
    8

    解题方案
    借用于高速排序思想,查找第K小元素

    代码

    #include <iostream>
    #include <fstream>
    using namespace std;
    
    void main_solution();
    void read_data( int *& data,int &n,int &k );
    int min_k(int *data,int s,int e,int k);
    
    
    int main()
    {
    	main_solution();
    	system("pause");
    	return 0;
    }
    
    
    void read_data( int *& data,int &n,int &k )
    {
    	ifstream reader;
    	reader.open( "data.txt" );
    	reader>>n;
    	reader>>k;
    	data = new int[n];
    	for(int i=0;i<n;i++)
    	{
    		reader>>data[i];
    	}
    	reader.close();
    }
    
    int min_k(int *data,int s,int e,int k)
    {
    	int  t = s;
    	int another = e;
    	while(t != another)
    	{
    		if( t < another )
    		{
    			if( data[t] <= data[another] )
    				another --;
    			else 
    			{
    				int d = data[another];
    				data[another] = data[t];
    				data[t] = d;
    
    				d = another;
    				another = t;
    				t = d;
    			}
    		}
    		else
    		{
    			if( data[t] >= data[another] )
    				another ++;
    			else 
    			{
    				int d = data[another];
    				data[another] = data[t];
    				data[t] = d;
    
    				d = another;
    				another = t;
    				t = d;
    			}
    		}
    	}
    
    	if( k == t-s+1 )
    		return data[t];
    	else if( k < t-s+1 )
    		return min_k(data,s,t-1,k);
    	else return min_k(data,t+1,e,k - (t-s+1));
    	
    }
    
    void main_solution()
    {
    	int * data;
    	int n;
    	int k;
    	read_data(data,n,k);
    	cout<<min_k(data,0,n-1,k)<<endl;
    }



  • 相关阅读:
    微信验证代码
    微信内置浏览器的JS API
    伪类和伪元素
    asp.net core mvc 脚手架搭建过程介绍
    C#无锁内存队列
    关于微软OWIN的一篇好文章
    安装了Win10预览版10074,不能设置开发模式的bug解决
    关于Quartz的一些经历
    MEF接口应用初探
    简单的接口框架
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4593854.html
Copyright © 2011-2022 走看看