简单排序模板

//【1】.冒泡 
	for(int i=1;i<N;i++)	//下标从1开始 
    {
    	for(int j=1;j<=N-i;j++)
    	{
    		if(a[j]>a[j+1])
    		{
    			int t=a[j];
    			a[j]=a[j+1];
    			a[j+1]=t;
			}
		}
	}

//【2】.选择排序 
	for(int i=0;i<100;i++)	//下标从0开始 
	{
		k=i;
		for(int j=i+1;j<100;j++)
		if(a[j]<a[k])
		k=j;
		if(k!=i)
		{
			int t=a[k];
			a[k]=a[i];
			a[i]=t;
		}
	}
 
 //【3】.插入排序
 	//1.普通方法
 	for(int i=2;i<N;i++)	//下标从1开始 
	{
		if(a[i]<a[i-1])
		{
			a[0]=a[i];
			a[i]=a[i-1];
			int j;
			for(j=i-2;a[0]<a[j];j--)
			a[j+1]=a[j];
			a[j+1]=a[0];
		}
	}
	//2.二分优化
	for(int i=2;i<N;i++)	//下标从1开始 
	{
		a[0]=a[i];
		int l=1,r=i-1,m,j;
		while(l<=r)
		{
			m=(l+r)/2;
			if(a[0]<a[m])
			r=m-1;
			else
			l=m+1;
		}
		for(j=i-1;j>=r+1;j--)
		a[j+1]=a[j];	
		a[j+1]=a[0];
	}
 
//【4】.顺序查找
int sxcz(int a[],int key)			//顺序查找,形参为要查找的值key 
{
	int i;
	a[0]=key;				//把哨兵a[0]赋值为要查找的值:key   
	for(i=N;a[i]!=key;i--);
	return i;				//返回key所在数组的下标,0代表未找到	
}

//【5】.二分查找 
int efcz(int a[],int key)			//二分查找,形参为要查找的值key 
{
	int low=1,high=N,mid;	//定义待查找区间的上界high,下界low,中间位置mid 
	while(low<=high)		//循环直到越界(low>high)停止 
	{
		mid=(low+high)/2;	//取中间位置mid:mid=(low+high)/2
		if(a[mid]==key)		//若相等,则查找成功 
		break;				//退出循环 
		else if(a[mid]>key)	//若大于,待查记录在区间的前半段
		high=mid-1;			//修改上界指针:high=mid-1  
		else				//若小于,待查记录在区间的后半段 
		low=mid+1;			//修改下界指针:low=mid+1  
	} 
	if(low<=high)			//若low<=high,代表查找成功 
	return mid;				//返回位置mid 
	else
	return 0;				//查找失败返回0 
}
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值