对乱序整数序列,先用快速排序按非减序排列,再进行二分查找,查找某个元素是否存在,若存在返回匹配的第一个下标位置(从0开始),不存在返回-1。
#include<iostream>
#define Maxsize 20
using namespace std;
void QuickSort(int R[], int s, int t) //对R[s]至R[t]的元素进行快速排序
{
int i = s, j = t;
int tmp;
if (s < t) //区间内至少存在两个元素的情况
{
tmp = R[s]; //用区间的第1个记录作为基准
while (i != j) //从区间两端交替向中间扫描,直至i=j为止
{
while (j > i && R[j] >= tmp)
j--; //从右向左扫描,找第1个小于tmp.key的R[j]
R[i] = R[j]; //找到这样的R[j],R[i]"R[j]交换
while (i < j && R[i] <= tmp)
i++; //从左向右扫描,找第1个大于tmp.key的记录R[i]
R[j] = R[i]; //找到这样的R[i],R[i]"R[j]交换
}
R[i] = tmp;
QuickSort(R, s, i - 1); //对左区间递归排序
QuickSort(R, i