快排和二分的复习

过了很长时间了,怕自己忘了,重写一下快排和二分。

    

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


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值