【基础算法】快速排序+二分搜索

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

原文地址:https://www.cnblogs.com/guotao/p/2809819.html