二分查找: 递归(分左右, 传递start,end参数)和非递归(使用while(l < h)),冒泡排序: 两个for循环。
1条回答 默认 最新
关注
#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; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报