借助快速排序的思想,在一组无序的记录中查找给定关键字的值等于key的记录,设此记录存放于数组 r [ 1... n ]中。若查找成功,则返回在 r数组中的位置,否则显示"not find"信息用c++实现
时间: 2024-03-18 17:42:43 浏览: 172
这道题可以通过快速排序的思想来实现,即以key为基准元素进行一次快速排序,然后根据排序过程中基准元素的位置和key的大小关系来判断查找结果。
算法步骤:
1. 初始化low和high指针为r数组的头和尾,mid指针为low。
2. 以r[low]为基准元素,对r[low...high]进行一次快速排序,得到基准元素的位置pivot。
3. 如果r[pivot]等于key,则返回pivot。
4. 如果r[pivot]大于key,则在r[low...pivot-1]中继续查找key,更新high指针为pivot-1,重复2-4步骤。
5. 如果r[pivot]小于key,则在r[pivot+1...high]中继续查找key,更新low指针为pivot+1,重复2-4步骤。
6. 如果low大于high,则查找失败,返回"not find"信息。
以下是具体的实现代码(C++):
```cpp
int quickSearch(vector<int>& r, int low, int high, int key) {
if (low > high) {
cout << "not find" << endl;
return -1;
}
int mid = low;
while (low < high) {
int pivot = partition(r, low, high);
if (r[pivot] == key) {
return pivot;
} else if (r[pivot] > key) {
high = pivot - 1;
} else {
low = pivot + 1;
}
}
cout << "not find" << endl;
return -1;
}
int partition(vector<int>& r, int low, int high) {
int pivot = r[low];
while (low < high) {
while (low < high && r[high] >= pivot) {
high--;
}
r[low] = r[high];
while (low < high && r[low] <= pivot) {
low++;
}
r[high] = r[low];
}
r[low] = pivot;
return low;
}
```
其中,r是存放记录的数组,low和high分别是数组的起始和终止位置,key是要查找的关键字。
阅读全文