// 求最大的n个数.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAX 50
#include<math.h>
void Sift(int a[], int low, int high) { //小顶堆生成
int i = low, j = 2 * i; //a[j]是a[i]的左结点
int temp = a[i];
while (j <= high) {
if (j<high&&a[j]<a[j + 1]) {
++j;
}
if (temp<a[j]) {
a[i] = a[j];
i = j;
j = 2 * i;
}
else break;
}
a[i] = temp;
}
void heapSort(int a[], int n, int pre_n) {
int i;
int temp;
for (i = n / 2; i >= 1; --i) { //建立初始堆
Sift(a, i, n);
}
for (i = n; i >= n - pre_n; --i) {
temp = a[1];
a[1] = a[i];
a[i] = temp;
Sift(a, 1, i - 1);
}
}
void ArrayGeneration(int array[], int size) {
srand((unsigned)time(NULL));
int i;
array[0] = 0;
for (i = 1; i<size; ++i) {
array[i] = rand();
}
for (i = 0; i<size; ++i) {
printf("%d ", array[i]);
}
printf("\n");
}
int main(int argc, char** argv) {
printf("input pre_n:\n");
int b[MAX + 1], n, i;
scanf_s("%d", &n);
ArrayGeneration(b, MAX + 1);
heapSort(b, MAX, n);
for (i = MAX; i >= MAX - n; --i) {
printf("%d ", b[i]);
}
return 0;
}
求最大的n个数
猜你喜欢
转载自blog.csdn.net/nockinonheavensdoor/article/details/80751097
今日推荐
周排行