最近在找实习,又把这些基本的算法实现了一篇,在CFree上跑过一遍,是正确的,可能有更好的实现的方法,这里只是把我的实现拿出来跟大家分享一下。
#include<iostream>
#include<string>
using namespace std;
int binarySearch(int a[],int n)
{
int low,high,mid,i,j;
low =0;
high=n-1;
while(low < high)
{
mid = (low+high)/2;
if(a[n-1]<a[mid] )
{
if(mid == low) return mid;
else high = mid ;
}
else if(a[n-1]>a[mid])
{
if(mid == low) return mid+1;
else low = mid ;
}
else return mid+1;
}
}
void binaryInsertionSort(int a[],int n)
{
int temp;
if(n==1) return;
for(int i= 2;i<=n;i++)
{
temp=a[i-1];
int pos = binarySearch(a,i);
if(pos<i-1){
for(int j=(i-1);j>=pos;j--)
a[j] = a[j-1];
a[pos]=temp;
}
}
}
int main()
{
int a[9] = { 4,1,7,0, 9,5,2,3,7};
binaryInsertionSort(a,9);
for(int i=0;i<9;i++)
cout<<a[i]<< " ";
}