求c++程序 算出a[100]数组里面的最大的10个数,速度最快

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求c++程序 算出a[100]数组里面的最大的10个数,速度最快相关的知识,希望对你有一定的参考价值。

将全部数组排序显然是最笨的方法,这样的复杂度是O(n*n)   题目只求最大十个数,那么你如果把后面90个都排好了,显然浪费时间。

正确做法是,按照快排的思路,写一个改进版:

    任意挑一个数作为标杆值,判断这个数应该排在第几个位置。把比他大的放左边,小的放右边。

    若这个数序位号k大于10,那么取前k个数重复1步骤;若小于10,则说明前k个肯定是最大10个数里面的,那么只要对k后面的数选出10-k个最大数就好了。方法重复1.


理论上这已经是最快的算法,但是由于快排具有不确定性。要挑一个稳定的且理论最快的算法,参考《算法分析与设计》一书中对于selectM算法的描述。它实际就是对上述算法稍作改进,保证每次选作标杆值的数肯定是排在中间左右。

这个算法的时间复杂度为O(n)。

参考技术A #include<iostream>
using namespace std;

void sort(int a[],int n)
int i,j;
int chg;
for(j=0;j<10;j++)
for(i=j+1;i<n;i++)
if(a[i]>a[j])
chg=a[i];
a[i]=a[j];
a[j]=chg;



int main()
int a[100];
int i;
for(i=0;i<100;i++)
a[i]=i+1;
sort(a,100);
for(i=0;i<10;i++)
cout<<a[i]<<'\t';
return 0;

/*
只排了前10个最大的元素,最快了
*/本回答被提问者采纳
参考技术B 直接排序,取前面或者后面10个数不就玩了 参考技术C 快速排序法

华为机试真题 C++ 实现最大时间

目录

题目

思路

考点

Code


题目

给定一个数组,里面有 6 个整数,求这个数组能够表示的最大 24 进制的时间是多少,输出这个时间,无法表示输出 invalid。

输入描述

输入为一个整数数组,数组内有六个整数。

输入整数数组长度为 6,不需要考虑其它长度,元素值为 0 或者正整数,6 个数字每个数字只能使用一次。

输出描述

输出为一个 24 进制格式的时间,或者字符串”invalid“。

备注:

输出时间格式为 xxxxx 式。

示例 1   输入输出示例仅供调试,后台判题数据一般不包含示例

输入

0 2 3 0 5 6

以上是关于求c++程序 算出a[100]数组里面的最大的10个数,速度最快的主要内容,如果未能解决你的问题,请参考以下文章

VB编程:随机产生10个100以内的数,并存放在A数组中,求A数组中的最大数及其所对应的下标。

求数组中最大子数组的和

自动生成10个整数(1~100),求出生成数组中的最大值和最小值,以及显示排序后的数据。运行效果如图所示

C++求两个数的最大值

c++用for循环求1~100内的奇数之和,偶数之和

MATLAB如何取数组中非零的最小值,数组里面都是正数。