蓝桥杯算法训练 区间k大数查询C++

在这里插入图片描述

思路:

第一眼看到这个题,依然是一脸懵逼…
最开始想的是一边输入就一边从小到大排序,最后直接读第k个值,结果写着写着发现题意都理解错了…每次需要排序的值是由输入决定的。

回头是岸后就一顿for循环,排序用的冒泡排序,作为一个小渣渣我还只会写选择排序法和冒泡排序法。

百度出来这个十大经典排序算法:https://www.cnblogs.com/onepixel/articles/7674659.html

里面的动图演示太到位了,留着下次看hhhh

注意:

  1. 存储序列和排序用的两个数组,每次排序结束后,重置数组xu[ ]为最初输入的数组num[ ].(因为开始没写这个一直出错 困惑了半天觉得实在是没毛病终于给我发现了…)
  2. xu[f[l]+k[l]-2] 减几也不是一次算对的…
  3. 由小到大,询问个数m最后再加的

代码:

#include<iostream>
using namespace std;
int main()
{
	int n,m;
	int num[1000],xu[1000],f[1000],r[1000],k[1000];
	cin>>n;
	for(int i=0;i<n;i++)
		cin>>num[i];
	cin>>m;
	for(int i=0;i<m;i++)
		cin>>f[i]>>r[i]>>k[i];
	for(int l=0;l<m;l++)
	{
		for(int i=0;i<n;i++)
			xu[i]=num[i];		
		for(int i=f[l]-1;i<r[l];i++)
			for(int j=i+1;j<r[l];j++)
				if(xu[i]<xu[j])
				{
					int temp;
					temp=xu[i];
					xu[i]=xu[j];
					xu[j]=temp;
				} 
		cout<<xu[f[l]+k[l]-2]<<endl;		
	}
	return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值