二分搜索算法(C语言实现)

二分查找的递归与非递归程序,跟踪分析执行时间,分析两种算法的复杂性。

二分查找算法思想:

二分又叫折半查找,要求待查找的序列有序。每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程。直到查找到了为止,否则序列中没有待查的关键字。

快速排序算法思想:

定义变量low、high分别标识数组的第一个元素下标和最后一个元素下标,变量key先存储第一个数组arr[0],以后key的值都为划分后的第一个元素,先从数组的后面看起,high–直到发现有一个数小于key,arr[low]=arr[high],因为此时已经确定arr[low]比key小,所以low++,直到low=high;利用递归来实现对已经划分的数组再次划分,直到划分的左右两边都只有一个数。

我以前的博客有写过快排的Java实现代码,想学习的同学可以参考。

递归和非递归思想:

将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小 于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。通过一次比较,将查找区间缩小一半。

算法步骤描述:

① 首先确定整个查找区间的中间位置 mid = ( left + right ) / 2;

② 用待查关键字值与中间位置的关键字值进行比较,只要相等,就查找成功

如果大于,则在后(右)半个区域继续进行折半查找

如果小于,则在前(左)半个区域继续进行折半查找

③ 对确定的缩小区域再按折半公式,重复上述步骤。

最后,得到结果:要么查找成功, 要么查找失败。

流程图如下:

    

递归流程图

非递归流程图

算法代码调试过程及输入输出结果:

例如输入数组大小为500时:  

对实验数据进行图表分析:(Excels和ppt生成)

源代码附上:

#include //C++万能库//排序算法设计(快速排序)
void QuickSort(int *arr,int low,int high){if(low=key) j--;if(i= right){return 0;} else if (x > a[middle]){return recursion_BinarySearch(a, x, middle + 1, right);//x>a[n/2]时,只要在数组a的右半部继续搜索x} else if (x < a[middle]){return recursion_BinarySearch(a, x, left, middle - 1);//如果x a[middle]){left = middle + 1;//x>a[n/2]时,只要在数组a的右半部分继续搜索x} else{right = middle - 1;//如果x

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部