先对数组排序,在进行折半查找(C++)

第一步:输入15个整数

第二步:对这15个数进行排序

第三部:输入一个数,在后在排好序的数中进行折半查找,判断该数的位置

实现代码如下:

方法一:

            选择排序法+循环折半查找法

#include<iostream>
using namespace std;
int main(){
	int a[15];
	int n,i;
	void array_sort(int a[], int n);
	int zeban(int a[], int start ,int end,int n);
	cout<<"Please input 15 numbers:"<<endl;
	for(i=0;i<15;i++){
		cin>>a[i];
	}
	cout<<"Sorted order:"<<endl; 
	//==============选择排序======== 
	array_sort(a,15);
	//=======输出排序完成的数组==== 
    for(i=0;i<15;i++){
		cout<<a[i]<<" ";
	 }
	cout<<endl;
	cout<<"please input a number:";
	cin>>n;
	//================折半查找========== 
	cout<<endl;
	cout<<"number "<<n<<" locate in "<<zeban(a,0,14,n)<<endl;
	return 0;
}
void array_sort(int a[],int n){
	int i,j,k,tool;
     for(i=0;i<n;i++){
	 k=i;
	 for(j=(i+1);j<n;j++){
		if(a[j]<a[k]){
		   k=j;
   	    }
	 }
		tool=a[i];
		a[i]=a[k];
		a[k]=tool;
	 }
}
int zeban(int a[],int start,int end,int n){
	int tag=-1;
	for(start=0,end=14;start<=end;){
		if(n==a[(start+end)/2]){
			tag=(start+end)/2+1;
			return tag;
		}else if(n<a[(start+end)/2]){
			end=(start+end)/2;
		}else if(n>a[(start+end)/2]){
			start=(start+end)/2;
		}
	}
}

第二种方法:

                     冒泡排序法+递归折半查找法

#include<iostream>
using namespace std;
int main(){
	int a[15];
	int n,i;
	void array_sort(int a[], int n);
    int IterBiSearch(int data[], const int x, int beg, int last); 
	cout<<"Please input 15 numbers:"<<endl;
	for(i=0;i<15;i++){
		cin>>a[i];
	}
	cout<<"Sorted order:"<<endl; 
	//==============选择排序======== 
	array_sort(a,15);
	//=======输出排序完成的数组==== 
    for(i=0;i<15;i++){
		cout<<a[i]<<" ";
	 }
	cout<<endl;
	cout<<"please input a number:";
	cin>>n;
	//================折半查找========== 
	cout<<endl;
	cout<<"number "<<n<<" locate in "<<IterBiSearch(a,n, 0, 14)<<endl;
	return 0;
}
void array_sort(int a[],int n){
	int i,j,tool;
     for(i=0;i<n;i++){
	    for(j=0;j<(n-i-1);j++){
		      if(a[j]>a[j+1]){
		         tool=a[j];
		         a[j]=a[j+1];
		         a[j+1]=tool;
		      }
	    }
    }
}
int IterBiSearch(int data[], const int x, int beg, int last)  
{  
    int mid = -1;  
    mid = (beg + last) / 2;  
    if (x == data[mid])  
    {  
        return (mid+1);  
    }  
    else if (x < data[mid])  
    {  
        return IterBiSearch(data, x, beg, mid - 1);  
    }  
    else if (x > data[mid])  
    {  
        return IterBiSearch(data, x, mid + 1, last);  
    }  
    return -1;  
}  


转载于:https://www.cnblogs.com/zhezh/p/3773540.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值