过了很长时间了,怕自己忘了,重写一下快排和二分。
void fastSort(int * arr,int n,int m)
{
int tmp;
if(m-n<1) return;//退出递归的条件
int partition=arr[m];//分割元素
int i=n-1;//double pointer
//int j=n;
for(int j=n;j<=m-1;++j)
{
if(arr[j]<partition)
{
i++;
tmp=arr[j];
arr[j]=arr[i];
arr[i]=tmp;
}
}
i++;
tmp=arr[m];
arr[m]=arr[i];
arr[i]=tmp;
fastSort(arr,n,i-1);
fastSort(arr,i+1,m);
}
空间复杂度O(1),时间复杂度O(nlgn),稳定的排序。
二分查找的代码:上次用递归,这次直接循环写的
int BinarySearch(int * arr,int n,int value)
{
int i;
int left=0;//存储数据的左右位置
int right=n-1;
while(true)
{
if(right-left==0)
{
if( value==arr[right])
return right;
else
return -1;
}
i=(left+right)/2;
if(arr[i]==value)
return i;
else if(arr[i]>value)
{
right=i-1;
//right=n-1;
}
else
{
left=i+1;
}
}
return -1;
}