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


