4002.基于快排思想的查找

Posted wind-chaser

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4002.基于快排思想的查找相关的知识,希望对你有一定的参考价值。

基于快排思想的查找

发布时间: 2018年11月26日 10:12   时间限制: 1000ms   内存限制: 128M

基于快排思想,其实就是两面开工呗~

借助于快速排序的算法思想,在一组无序的记录中查找给定关键字值等于key的记录。设此组记录存放于数组r[l..n]中。若查找成功,则输出该记录在r数组中的位置及其值,否则显示“not find”信息。

多组数据,每组数据三行。第一行为序列的长度n,第二行为序列的n个元素(元素之间用空格分隔,元素都为正整数),第三行为要查找的key值。当n等于0时,输入结束。

每组数据输出一行。如果查找成功,输出key在数组中的位置(1到n)和key的值,两个数字之间用空格隔开。如果查找失败,输出“not find”。

5
1 2 43 5 6
43
4
1 9 20 3
21
0
3 43
not find
 1 #include<iostream>
 2 using namespace std;
 3 int search(int r[], int low, int high, int key)
 4 {
 5     while (low<high)
 6     {
 7         while (low <= high&&r[high] > key)high--;
 8         if (r[high] == key)return high;
 9         while (low <= high&&r[low] < key)low++;
10         if (r[low] == key)return low;
11     }
12     cout << "not find" << endl;
13     return 0;
14 }
15 int main()
16 {
17     int n;
18     while (true)
19     {
20         int a[10000],aim;
21         cin >> n;
22         if (!n)break;
23         for (int i = 0; i < n; i++)
24         {
25             cin >> a[i];
26         }
27         cin >> aim;
28         if(search(a, 0, n, aim))
29             cout << search(a,0,n,aim)+1 << " " << aim << endl;
30     }
31 }

 

以上是关于4002.基于快排思想的查找的主要内容,如果未能解决你的问题,请参考以下文章

快速排序和二分查找

如何用快排思想在O(n)内查找第K大元素?

如何用快排思想在O(n)内查找第K大元素?

二分查找的应用场景

算法排序02——归并排序介绍及其在分治算法思想上与快排的区别(含归并代码)

快排查找数组中的第K个最大元素