二分查找

注意:二分查找的前提是:有序序列!  所以记得要先将序列排序,再进行二分查找(一般默认为在升序序列进行二分查找)

#include <iostream>
using namespace std;
//二分查找  在有序数组中查找x,默认为升序! 
int Binary_search(int* a,int n,int x)
{
	int left=0;
	int right=n-1;
	int mid=(left+right)/2;
	while(left<=right)
	{
		if(a[mid]<x)
		{
			left=mid+1;
			mid=(left+right)/2;
		}
		else if(a[mid]>x)
		{
			right=mid-1;
			mid=(left+right)/2;
		}
		else
		 return mid;
	}
	return NULL;
}
//输出打印 
void print(int* a,int n)
{
	for(int i=0;i<n;i++)
	cout<<a[i]<<' ';
	cout<<endl;
}
//选择排序升 
void selectsort(int* a,int n)
{
	int k,temp;
	for(int i=0;i<n;i++)
	  {
	  	k=i;
	  	for(int j=i+1;j<n;j++)
	    {
	       if(a[j]<a[k])
	       k=j;
	    }
	    if(k!=i)
	    {
	    	temp=a[i];
			a[i]=a[k];
			a[k]=temp;
	    }
	  }
}
//冒泡排序降序 
void bubbleSort(int* a,int n)
{
	int temp;
	for(int i=1;i<n;i++)//冒泡趟数 
	{
		for(int j=n-1;j>=i;j--)
		{
			if(a[j]>a[j-1])
			{
				temp=a[j]; a[j]=a[j-1];a[j-1]=temp;
			} 
		} 
	}
} 
int main()
{
	int arr[]={1,4,3,6,9,3,5,8,10}; 
	cout<<"原始数组:"<<endl;
	print(arr,sizeof(arr)/sizeof(int));
	cout<<"排序后:"<<endl;
	selectsort(arr,sizeof(arr)/sizeof(int));
	print(arr,sizeof(arr)/sizeof(int));
	cout<<"在有序序列中查找 3 如果存在,返回其下标,不存在则返回NULL"<<endl;
	cout<<Binary_search(arr,sizeof(arr)/sizeof(int),9)<<endl;
	cout<<"冒泡降序排列:"<<endl;
	bubbleSort(arr,sizeof(arr)/sizeof(int));
	print(arr,sizeof(arr)/sizeof(int));
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值