获取一个整型数组前三个最大的值

来源:互联网 发布:仿今日头条 php 编辑:程序博客网 时间:2024/05/17 09:17

没有用堆排序,遍历一次就够了,顺便练习一下二维数组

#include <stdio.h>int (*getmin(int (*input)[3],int (*out)[1]))[1]{if (input == NULL){return NULL;}if (input[0][0] < input[0][1]){if (input[0][0] < input[0][2]){out[0][0] = 0;out[1][0] = 0;return out;}else{out[0][0] = 0;out[1][0] = 2;return out;}}if (input[0][1] < input[0][2]){out[0][0] = 0;out[1][0] = 1;return out;}else{out[0][0] = 0;out[1][0] = 2;return out;}}void get3maxnum(int *num,size_t size,int (*out)[3]){size_t i;int res[2][1] = {0};int (*pres)[1] = NULL;if (size < 3 || num == NULL || out == NULL){return ;}//初始化out[0][0] = *(num + 0);out[1][0] = 0;out[0][1] = *(num + 1);out[1][1] = 1;out[0][2] = *(num + 2);out[1][2] = 2;for (i = 3; i < size; ++i){pres = getmin(out,res);//返回一个二维指针if (*(num + i) > out[pres[0][0]][pres[1][0]]){out[pres[0][0]][pres[1][0]] = *(num + i);out[1][pres[1][0]] = i;}}}int main(void){int a[] = {454,45,54,48,0,1,888,9};int res[2][3] = {0};int i = 0;get3maxnum(a,sizeof(a)/sizeof(a[0]),res);printf("前三个最大值:\t");for (i = 0; i < 3; ++i){printf("%4d ",res[0][i]);}printf("\n索引:\t\t");for (i = 0; i < 3; ++i){printf("%4d ",res[1][i]);}putchar('\n');return 0;}


 

 

 

 

 

0 0
原创粉丝点击