B - Where is the Marble?

本文介绍了一种使用快速排序算法进行排序,随后实现查找指定元素的功能。通过递归方式完成排序过程,并对输入的查找元素在已排序数组中进行搜索,如果找到则返回其位置,否则返回未找到的消息。

本题先用一个快速排序然后
查找对比即可

#include<iostream>
using namespace std;
//交换
void swap(int list[], int left, int right) {
	int tamp;
	tamp = list[left];
	list[left] = list[right];
	list[right] = tamp;
}
//求分割点
int qiupoint(int list[], int left, int right) {
	int frist = list[left];
	while (left < right) {
		while (left < right&&list[right]>=frist) {
			right--;
		}
		swap(list, left, right);
		while (left < right&&list[left]<=frist) {
			left++;
		}
		swap(list, left, right);



	}

	return left;
}

//快速排序法
void quickpx(int list[], int left, int right) {
	if (left < right) {
		//分割点
		int point = qiupoint(list, left, right);
		//递归左调用
		quickpx(list, left, point - 1);
		//递归右调用
		quickpx(list, point + 1, right);


	}


}

int main() {

int n,q;
    int h=0;
	while(cin >> n>>q){

if(n==0&&q==0){
   return 0;
}
h++;
int list[10000];
for(int i=0;i<n;++i){
    cin>>list[i];
}
int a[10000];
for(int i=0;i<q;++i){
    cin>>a[i];
}

quickpx(list,0 , n-1 );
 cout<<"CASE# "<<h<<":"<<endl;
for(int i=0;i<q;++i){
    int c=0;

    for(int j=0;j<n;++j){

        if(a[i]==list[j]){
            c=1;

        cout<<a[i]<<" found at "<<j+1<<endl;
        break;


        }
    }
    if(c==0){
       cout<<a[i]<<" not found"<<endl;
    }

}

	}

	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值