Bol5261 2021-09-28 14:05 采纳率: 97.5%
浏览 17
已结题

二分查找和冒泡排序?

二分查找: 递归(分左右, 传递start,end参数)和非递归(使用while(l < h)),冒泡排序: 两个for循环。

  • 写回答

1条回答 默认 最新

  • yangbocsu Java领域新星创作者 2021-09-28 14:11
    关注
    
    #include<iostream>
    int getIndex(int *a,int n,int data)//查找值为data的元素在数组中的下标位置,采用二分查找非递归的形式;
    {
     if (a==NULL||n<=0)
     {
      return -1;
     }
     int start=0;
     int end=n-1;
     while (start<end)
     {
      int mid=start+(end-start)/2;
      if (data==a[mid])
      {
               return mid;
      }
      else if (data>a[mid])
      {
       mid=mid+1;
      }
      else
       mid=mid-1;
     }
     return -1; 
    
    }
    int getIndexDigui(int *a,int data,int start,int end)//递归
    {
         int mid=start+(end-start)/2;
            if (start>end)
            {
                return -1;
            }
          if (data==a[mid])
          {
           return mid;
          }
          else if (data>a[mid])
          {
           return getIndexDigui(a,data,mid+1,end);
          }
          else
           return getIndexDigui(a,data,0,mid-1);
       
    }
    int getIndexOwn(int *a,int n,int data)
    {
         if (a==NULL||n<=0)
         {
          return -1;
         }
         else
          return getIndexDigui(a,data,0,n-1);
    }
    int main(int argc, char* argv[])
    {
         int a[]={2,4,5,7,8,9};
         int length=sizeof(a)/sizeof(int);
         int index=getIndex(a,length,5);
         cout<<"查找的元素下标为:"<<index<<endl;
         int index2=getIndexOwn(a,length,7);
         cout<<"采用递归调用的形式的下标为:"<<index2<<endl;
         return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月6日
  • 已采纳回答 9月28日
  • 创建了问题 9月28日