發布時間: 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 }
