算法设计c语言线性时间选择,实验五 线性时间选择算法设计.doc

实验五 线性时间选择算法设计

宁夏师范学院数学与计算机科学学院

《》实验报告

实验序号:实验项目名称:

学 号姓 名专业、班实验地点指导教师时间一、实验目的及要求

二、实验设备(环境)及要求

1、环境要求:

硬件:PC(PII以上,128M以上内存)、因特网接入;

软件:Windows XP操作系统、。

三、实验内容与步骤

#include

int partition int s[], int low, int high if low high return 0;

if low high return low;

s[0] s[low];

while low high while low high && s[high] s[0] high--; if low high s[low++] s[high]; while low high && s[low] s[0] low++; if low high s[high--] s[low]; s[low] s[0];

return low;

//分治找K-th Number

int Select int s[], int low, int high, int k

//得到中间数的下标

int i partition s, low, high ;

//j为左区间长度

int j i - low + 1;

//位置大就在左区间找,否则就在右区间找

if j k return s[i];

else if k j

return Select s, low, i, k ;

else return Select s, i+1, high, k-j ;

int main int n;int i;

int low, high, k;

int a[20]; printf "请问有多少个数要输入?\n" ;

scanf "%d",&n ;

printf "请输入数据:\n" ;

for i 1; i n; i++

scanf "%d",&a[i] ;

printf "\n" ;

printf "请输入第几个最小值:\n" ;

scanf "%d",&k ;

printf "第%d个最小的数为:%d",k,Select a, 1, n, k ;

3 使用分治策略编写程序,求n个数据中第k个最大的数。

#include

int partition int s[], int low, int high if low high return 0;

if low high return low;

s[0] s[low];

while low high while low high && s[high] s[0] high--; if low high s[low++] s[high]; while low high && s[low] s[0] low++; if low high s[high--] s[low]; s[low] s[0];

return low;

//分治找K-th Number

int Select int s[], int low, int high, int k

//得到中间数的下标

int i partition s, low, high ;

//j为左区间长度

int j i - low + 1;

//位置大就在左区间找,否则就在右区间找

if j k return s[i];

else if k j

return Select s, low, i, k ;

else return Select s, i+1, high, k-j ;

int main int n;int i;

int low, high, k;

int a[20]; printf "请问有多少个数要输入?\n" ;

scanf "%d",&n ;

printf "请输入数据:\n" ;

for i 1; i n; i++

scanf "%d",&a[i] ;

printf "\n" ;

printf "请输入第几个最大值:\n" ;

scanf "%d",&k ; printf "第%d个最大的数为:%d",k,Select a, 1, n, k ;

四、实验结果与数据处理

五、分析与讨论六、教师评语

成绩

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值