// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdio.h>
#include <algorithm>
#include <vector>
#include <time.h>
using namespace std;
#define MAX_ARRAY_SIZE 10
#define TOP_K 5
struct Value_Pos
{
int nPos;
int nValue;
Value_Pos()
{
nPos = 0;
nValue = 0;
}
};
void getRand(int* data, int length)
{
for (int i = 0; i < length; i++) {//生成MAX_ARRAY_SIZE个数组元素
data[i] = i;
}
srand(unsigned(time(NULL)));//打乱顺序
random_shuffle(data, data + length);
//print the array
printf("generate the array using rand:\n");
for (int i = 0; i < length; i++) {
printf("%d ", data[i]);
}
printf("\n");
}
int main()
{
int arr[MAX_ARRAY_SIZE] = { 0 };
getRand(arr, MAX_ARRAY_SIZE);
Value_Pos stData[TOP_K];
int k = TOP_K;
int j = 0;
for (int i = 0; i < MAX_ARRAY_SIZE; i++){
if (j == 0){
if (arr[i] > stData[j].nValue){
stData[j].nValue = arr[i];
stData[j].nPos = i;
j++;
}
}
else{
for (int m = 0; m < k; m++){
if (arr[i] > stData[m].nValue){//顺序比较最大值
for (int n = 0; n < k - m - 1; n++){//挪到位置
stData[k - n - 1].nValue = stData[k - n - 2].nValue;
stData[k - n - 1].nPos = stData[k - n - 2].nPos;
}
stData[m].nValue = arr[i];//插入到空位置
stData[m].nPos = i;
break;
}
}
}
}
for (int i = 0; i < TOP_K; i++){
printf("位置:%d 值:%d\n", stData[i].nPos, stData[i].nValue);
}
printf("\n");
}
C语言 top N问题之返回前面几个最大值的位置以及值
最新推荐文章于 2022-04-26 21:55:09 发布