zoukankan      html  css  js  c++  java
  • 输出前m大个数,时间复杂度O(n+mlog(m)) [快排]

    在这里插入图片描述

    #include <iostream>
    #include <string>
    #include <math.h>
    #include<algorithm>
    using namespace std;
    int a[10005];
    int b[10005];
    bool compare(int x, int y)
    {
    	return x > y;
    }
    void arrangeRight(int l, int r,int m)
    {
    	if (l >= r)
    		return;
    	int k = a[l];
    	int low = l, high = r;
    	while (low != high)
    	{
    		while (low < high && a[high] >= k)
    			high--;
    		swap(a[low], a[high]);
    		while (low < high && a[low] <= k)
    			low++;
    		swap(a[low], a[high]);
    	}
    	if (r - low + 1 == m)
    		return;
    	else if (r - low + 1 > m)
    		arrangeRight(low + 1, r, m);
    	else
    		arrangeRight(l, low - 1, m - (r - low + 1));
    }
    int main()
    {
    	int n, m;
    	cin >> n >> m;
    	for (int i = 0; i < n; i++)
    	{
    		cin >> a[i];
    	}
    	arrangeRight(0, n - 1, m);
    	int count = 0;
    	for (int i = n - m; i < n; i++) b[count++] = a[i];
    	sort(b, b + m, compare);
    	for (int i = 0; i < m; i++)
    	{
    		cout << b[i] << " ";
    	}
    }
    
  • 相关阅读:
    第06组Alpha冲刺(4/6)
    第06组Alpha冲刺(3/6)
    第06组Alpha冲刺(2/6)
    第06组 Alpha冲刺 (1/6)
    08-js函数
    07-数组
    06-js分支
    05-js运算符
    04-js变量
    03-css3D转换
  • 原文地址:https://www.cnblogs.com/Hsiung123/p/13811937.html
Copyright © 2011-2022 走看看