求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++ 实现最大时间
目录
题目
给定一个数组,里面有 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数组中的最大数及其所对应的下标。