DD7. 整数无序数组求第K大数
描述
给定无序整数序列,求其中第K大的数,例如{45,67,33,21},第2大数为45输入描述
输入第一行为整数序列,数字用空格分隔,如:45 67 33 21 输入第二行一个整数K,K在数组长度范围内,如:2输出描述
输出第K大的数,本例为第2大数:45示例1
输入:
45 67 33 21 2
输出:
45
C 解法, 执行用时: 2ms, 内存消耗: 256KB, 提交时间: 2019-07-23
#include<stdio.h> int main() { int a[1000]; int i=0,k=0,num,j,temp; while(1) { scanf("%d",&a[i]); if('\n' == getchar()) break; i++; } scanf("%d",&k); num=i+1; for(i=0;i<num;i++) { for(j=0;j<num-1-i;j++) { if(a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } printf("%d",a[num-k]); }
C 解法, 执行用时: 2ms, 内存消耗: 292KB, 提交时间: 2021-09-01
#include <stdio.h> #define ArrayLength 20 int array[ArrayLength]; int main() { int i,j,k,temp,find; i = 0; while(i < ArrayLength) { scanf("%d",&array[i]); if(getchar()=='\n') break; i++; } for(j =0;j<i;j++) { for(k = 0;k< i-j;k++) { if(array[k] < array[k+1]) { temp = array[k+1]; array[k+1] = array[k]; array[k] = temp; } } } scanf("%d",&find); printf("%d\n",array[find-1]); return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 292KB, 提交时间: 2018-08-18
#include <stdio.h> #include <string.h> #include <stdlib.h> #define SIZE 1024 int cmp(const void *a, const void *b) { return *(int *)b - *(int *)a; } int main() { char a[SIZE], b[SIZE], d[SIZE]; int c[SIZE]; int tmp = 0, i = 0, len = 0; int N = 0, K = 0; int left, right; gets(a); gets(d); while (a[i] != 0) { if (a[i] == ' ') { memcpy(b, &a[i-len], len); c[N] = atoi(b); memset(b, 0, len); N++; len = 0; i++; continue; } len++; i++; } memcpy(b, &a[i-len], len); c[N] = atoi(b); K = atoi(d); qsort(c, N + 1, sizeof(int), cmp); printf("%d", c[K - 1]); return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 316KB, 提交时间: 2021-08-10
#include <stdio.h> #include <stdlib.h> int main() { char c; int a[1024]; int k=0; int n=0; while(c!='\n') { scanf("%d", &a[n++]); if (getchar()=='\n') break; } scanf("%d", &k); for(int i=0; i<n-1; i++) { for(int j=0; j<n-1;j++) { if (a[j]<a[j+1]){ int tmp = a[j]; a[j]=a[j+1]; a[j+1]=tmp; } } } printf("%d\n", a[k-1]); }
C 解法, 执行用时: 2ms, 内存消耗: 336KB, 提交时间: 2019-10-11
#include <stdio.h> int func(int a[],int k,int n) { int i,j,t; for(i=0;i<n-1;i++) { //排好一个就少比较一次 for(j=0;j<n-1-i;j++) { //如果前一个比后一个大就交换位置 if(a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } return a[n-k]; } int main() { int i=0,b,k; int a[20]; do { scanf("%d",&a[i]); ++i; } while (getchar()!='\n'); scanf("%d",&k); b=func(a,k,i); printf("%d",b); return 0; }