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 #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 }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM