【数据结构】【排序】求第k大的数——用谢尔排序实现
2015-12-25 17:10
417 查看
题源:*航*系数据结构作业
【问题描述】
求n个数中第k大的数
【输入形式】
第一行n k,第二行为n个数,都以空格分开
【输出形式】
第k大的数
【样例输入】
10 3
18 21 11 26 12 2 9 33 43 28
【样例输出】
28
【样例说明】
【评分标准】
时间复杂度大于等于O(k*n)的方法得一半分,时间复杂度小于等于O(n*log2k)得满分。
提示:
1. 分析各种排序或查找算法的优缺点,分析解决具体问题的时间复杂度,进而找出更高效的算法。
2. n与k的值不同,不同算法的效率也会有影响,如n=10, k=9时,可以找第2小的数。
========================= 谢尔(ShellSort)排序的介绍 ===================
1) MoreWindows的csdn blog
http://blog.csdn.net/morewindows/article/details/6668714
2) 《数据结构教程(第二版)》 北航出版社_唐发根 P333
====== 代码============================================
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n, k;
int i;
int a[1024] = {0};
scanf("%d%d", &n, &k);
for( i = 0; i < n; i++ )
scanf("%d", &a[i]);
ShellSort(a,n);
printf("%d", a[n-k+1]);
return 0;
}
void ShellSort (int a[], int n) {
int i, j;
int flag;
int gap = n;
int temp;
while ( gap > 1 ) {
gap = gap / 2;
do {
flag = 0;
for ( i = 1; i <= n -gap; i++ ) {
j = i + gap;
if( a[i] > a[j] ) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
flag = 1;
}
}
} while ( flag != 0);
}
}
相关文章推荐
- C++数据结构之图的深度和广度遍历
- 数据结构课程设计-家谱系统的简易开发
- 数据结构课程设计—图书信息管理系统
- 数据结构课程设计----银行模拟系统
- 数据结构课程设计校园导游(吃货版)
- 数据结构课程设计 图书管理系统
- 数据结构入门
- C++数据结构图的深度遍历
- 数据结构课程设计——图书信息管理系统设计
- 数据结构之排序算法(四)-归并排序
- 数据结构课程设计—学生信息管理系统
- 数据结构-学生成绩管理系统
- 数据结构课程设计-图书管理系统 作者:彭子竹
- 【转】OpenCV Mat数据结构
- 数据结构 — AVL tree(平衡二叉树)
- 数据结构课程设计:学成成绩管理系统
- 数据结构课程设计-学生信息管理系统
- <数据结构课程设计> 学生成绩管理系统开发
- 数据结构课程设计代码--电子投票系统
- 数据结构-线性表实现火车票销售