zoukankan      html  css  js  c++  java
  • 先对数组排序,在进行折半查找(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;  
    }  


  • 相关阅读:
    出现System.web.mvc冲突的原因及解决方法CS0433
    看完此文还不懂NB-IoT,你就过来掐死我吧...
    html5调用手机陀螺仪实现方向辨识
    黑盒测试和白盒测试的区别
    CentOS7 下 keepalived 的安装和配置
    centos 下 mysql+keepalived实现双主自由切换
    MySQL 高可用性—keepalived+mysql双主(有详细步骤和全部配置项解释)
    备份VMware虚拟磁盘文件 移植到其他虚拟机
    Centos7 Mysql 双机热备实现数据库高可用
    CentOS7配置Mysql热备份
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3194205.html
Copyright © 2011-2022 走看看