【基础算法】快速排序+二分搜索
#include <iostream>
using namespace std;
//元素交换函数
void lvSwap(int *apiArray, int index1, int index2)
{
int temp = apiArray[index1];
apiArray[index1] = apiArray[index2];
apiArray[index2] = temp;
}
//快速排序
void lvQuickSort(int *apiArray, int arraySize)
{
int liLast=0;
int i;
if(arraySize > 1){
lvSwap(apiArray,0,rand()%arraySize); //随机挑选数组内的一个数作为基准元素
for(i = 1; i<arraySize;i++){
if(apiArray[0] > apiArray[i]){
liLast++;
lvSwap(apiArray,i,liLast); //将基准元素交换到数组内部,将数组分为两部分
}
}
lvSwap(apiArray, 0, liLast);
lvQuickSort(apiArray, liLast);
lvQuickSort(apiArray+liLast, arraySize-liLast-1); //对后半部分进行排序,必须多减1,要不就陷入死循环
}
return ;
}
//二分搜索
int BinarySearch(int *apiArray, int arraySize, int goal)
{
int high = arraySize;
int low = 0;
int mid;
while(high > low+1){ //low必须加一,要不查找不到元素时会死循环
mid = (high+low)/2;
if(goal < apiArray[mid])
high = mid;
else if (goal > apiArray[mid])
low = mid;
else
return mid;
}
return arraySize;
}
int main()
{
int a[] = {13,365,23,234,403,23,9,98,15,143};
lvQuickSort(a,sizeof(a)/4);
for(int i=0; i < sizeof(a)/4; i++)
{
cout<<a[i]<<'\t';
}
cout<<endl;
int i;
cin >>i;
i = BinarySearch(a,sizeof(a)/4,i);
if(i==sizeof(a)/4)
cout<<"Search failure!!!!"<<endl;
else
cout<<"The goal's site is "<<i<<endl;
return 0;
}