分治1——输出前m个大的数

标签: 分治
9人阅读 评论(0) 收藏 举报
分类:
输出n个数中前m个大的数可以采用先排序在取前m个大的数,这个最好的时间复杂度为O(nlogn)。可以利用快排的思想加快时间复杂度,下面算法时间复杂度为O(n+mlogm),若m<<n时,则时间复杂度约为O(n)。
#include<iostream>

using namespace std;
int a[100];

void swap(int &a, int &b)
{
	int temp;
	temp = b;
	b = a;
	a = temp;
}
void QuickSort(int a[], int s, int e, int m)
{
	if (s >= e)
		return;
	int k = a[s];
	int i = s, j = e;
	while (i != j)
	{
		if (j > i && a[j] > k)
			j--;
		swap(a[i], a[j]);
		if (j > i && a[i] < k)
			i++;
		swap(a[i], a[j]);
	}

	int b = (e - j) + 1; // 判断右边大的数有几个
	if (m > b)           // 若小于m个,在左边再取m-b个
		QuickSort(a, s, i, m - b);
	if (m < b)           // 若大于m个,在右边再去m个
		QuickSort(a, j + 1, e, m);
}

int main()
{
	int m,n;
	cin >> n >> m;
	for (int i = 0; i < n; i++)
		cin >> a[i];
	QuickSort(a, 0, n - 1, m);
	for (int i = n-1; i >= n-m; i--)
		cout << a[i] << ' ';
	cout << endl;
	system("pause");
}

查看评论

分治法:前m大的数

问题描述给定一个数组包含n个元素,统计前m大的数并且把这m个数从大到小输 出问题分析如果先排序再找前m大的,时间复杂度为O(nlogn)用分治处理:复杂度 O(n+mlogm) 思路:把前m大的...
  • a_chen666
  • a_chen666
  • 2017-08-30 11:45:19
  • 69

求一列数前m大的数

思想: 一.先排序,在输出后m个元素。(复杂度O(nlogn)) 二.先把前m大的元素弄到数组最右边,在对这m个数进行排序(复杂度为O(n+mlogm),其中 把前m大的元素弄到数组最右边花费为...
  • yuanba_xs
  • yuanba_xs
  • 2017-03-13 22:22:21
  • 240

输出前m大个数,时间复杂度O(n+mlog(m))

#include using namespace std;void swapM(int &a, int &b) { int tmp = a; a = b; b = tmp; }...
  • rwang_1001
  • rwang_1001
  • 2017-08-13 15:36:31
  • 286

【杭电oj】3785 - 寻找大富翁(水)

寻找大富翁 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su...
  • wyg1997
  • wyg1997
  • 2016-02-29 18:30:08
  • 198

分治法 快排 输出第k大的数

总时间限制: 10000ms 单个测试点时间限制: 1000ms 内存限制: 65536kB 描述 给定一个数组,统计前k大的数并且把这k个数从大到小输出。 输入第一行包含一...
  • u011002533
  • u011002533
  • 2017-02-14 23:49:51
  • 752

输出前m大的数

描述 给定一个数组包含n个元素,统计前m大的数并且把这m个数从大到小输出。 输入 第一行包含一个整数n,表示数组的大小。n 输出 从大到小输出前m大的数,每个数一行。 方法一: ...
  • Jamence
  • Jamence
  • 2017-08-11 22:31:06
  • 177

分治法求第K大的数字

  • 2011年07月10日 17:14
  • 927B
  • 下载

【数据结构】【排序】求第k大的数——用谢尔排序实现

题源:*航*系数据结构作业 【问题描述】  求n个数中第k大的数 【输入形式】  第一行n k,第二行为n个数,都以空格分开 【输出形式】  第k大的数 【样例输...
  • tao20dage
  • tao20dage
  • 2015-12-25 17:10:31
  • 242

求一个数组中前K大的数或者第K大的数

#include using namespace std; void BubbleSort(int a[], int alen) { for(int i = 0; i < alen; i++) ...
  • JiuHuangShan
  • JiuHuangShan
  • 2017-09-16 14:53:12
  • 439

第k大的数——分治法

问题描述: 初阶:有两个数组A和B,假设A和B已经有序(从大到小),求A和B数组中所有数的第K大。 进阶:有N台机器,每台机器上有一个有序的大数组,需要求得所有机器上所有数中的第K大。注意...
  • TommyZht
  • TommyZht
  • 2015-05-30 10:26:24
  • 880
    个人资料
    等级:
    访问量: 560
    积分: 77
    排名: 155万+
    文章存档