发布时间: 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 #include<algorithm>
3 using namespace std;
4 int search(int r[], int low, int high, int key)
5 {
6 while (low<high)
7 {
8 if (r[low] > key&&r[high] < key)
9 {
10 high--; low++;
11 }
12 while (low <= high&&r[high] > key)high--;
13 if (r[high] == key)return high;
14 while (low <= high&&r[low] < key)low++;
15 if (r[low] == key)return low;
16
17 //swap(r[high], r[low]);
18
19 }
20 cout << "not find" << endl;
21 return 0;
22 }
23 int main()
24 {
25 int n;
26 while (true)
27 {
28 int a[10000], aim;
29 cin >> n;
30 if (!n)break;
31 for (int i = 0; i < n; i++)
32 {
33 cin >> a[i];
34 }
35 cin >> aim;
36 if (search(a, 0, n, aim))
37 cout << search(a, 0, n, aim) + 1 << " " << aim << endl;
38 }
39 }
来源:https://www.cnblogs.com/wind-chaser/p/10049745.html