c语言 在有n个元素的数组s中查找书名为a的书,对于给定的n个元素的数组a[1..n] 要求从中找出第k小的元素,输出这个元素 pascal...

满意答案

02ae427d08e371d7e90d5b995e828d6d.png

ljmwwq

2013.06.21

02ae427d08e371d7e90d5b995e828d6d.png

采纳率:41%    等级:12

已帮助:16285人

绝对正确。。 选我最佳吧亲。。

var

i,j,k,n,right,temp,left:integer;

a:array[0..1000]of integer;

function template(left,right:integer):integer;

var

temp,i,j:integer;

begin

i:=left;j:=right;

while (j>i) do

begin

while (a[i]i) do

j:=j-1;

if (j>i) then begin temp:=a[i];a[i]:=a[j];a[j]:=temp;i:=i+1;end;

while (a[i]i) do

i:=i+1;

if (j>i) then begin temp:=a[i];a[i]:=a[j];a[j]:=temp;j:=j-1;end;

end;

template:=j-left+1;

end;

procedure select(left,right,k:integer);

begin

n:=right-left+1;

if (k>n) or (k<1) then begin writeln('error'); halt;end

else

begin

temp:=template(left,right);

if k=temp then begin writeln(a[temp+left-1]); exit;end

else begin

if k>temp then select(temp+left,right,k-temp)

else select(left,temp+left-2,k);

end;

end;

end;

begin

assign(input,'number.in');

assign(output,'number.out');

reset(input);

rewrite(output);

readln(n,k);

for i:=1 to n do

read(a[i]);

select(1,n,k);

close(input);

close(output);

end.

02分享举报

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值