利用二分法实现插入排序算法(二分法使用递归来…
2018-06-17 23:46:21来源:未知 阅读 ()
最近在看《算法导论》这本书,在练习题当中发现了这样的一个问题:使用二分查找法来实现插入排序,由于之前的内容当中有讲解二分法的递归实现,所以在这便将它们结合起来希望解决这个问题。闲话不多说了,直接上代码:
// Algrithms.cpp : 定义控制台应用程序的入口点。 // //使用二分法来完成插入排序,并且使用递归算法来完成二分法 #include "stdafx.h" int Binary_Divide(int A[], int low, int height, int key){ //递归终止的条件为输入的low>输入的height,这时所寻找到的位置为low的左边或者右边 //这时只需要判断key和A[low]之间的大小就可以判断出key所应该放置的位置 if (low > height) { if (key > A[low]) { return low + 1;//如果key比A[low]大,那么key就放置在A[low]的下一个位置上面 } else{ return low;//如果key比A[low]小,那么key就放置在A[low]的位置上面(因为之后的程序会将这个位置空出来) } } if (A[(low + height) / 2] > key) { Binary_Divide(A, low, (low + height) / 2 - 1, key); }else { Binary_Divide(A, (low + height) / 2 + 1, height, key); } } int _tmain(int argc, _TCHAR* argv[]) { int a[11] = { 6, 10, 13, 3, 7, 20, 24, 100, 1, 3, 6 };//被排序的数组 int array_length = sizeof(a) / sizeof(a[0]);//数组大小 int key;//关键字 //将A[n]插入到已经排好序的前n-1个数当中 for (int i = 1; i < array_length; i++) { key = a[i]; int j = i - 1; int position = Binary_Divide(a, 0, j, key);//二分法寻找key所应该处的位置 //将position(包括position)之后直到j的数往后挪动一个位置 while (j >= 0 && j>=position) { if (a[j]>key) { a[j + 1] = a[j]; } j--; } a[position] = key;//将关键字放置在正确的位置上面 //每排列好一个元素的位置就将数组打印出来 for (int k = 0; k < array_length; k++) { printf("%d ", a[k]); } printf("%d\n",position);//打印所找到的合适位置 } getchar(); return 0; }
算法思路很简单,无非是将原来的线性查找被排序元素的合适的位置的部分换成了使用二分法来查找合适的位置,之前困扰我很久的是递归终止情况的判断。在学习二分查找的时候,我们知道,如果一个数不存在于一个数组当中的话,二分法会因为所输入的数组下界大于上界而终止递归,而在本算法查找位置的时候,二分法的这种递归终止的性质会导致我们找到一个距离“适合位置”最近的点,所以这个点和关键字之间大小的判断就可以传输回正确的位置了。
菜鸟一枚,第一次发博客,还请园里面的大神们多多指教。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- C++冒泡排序 (基于函数模板实现) 2020-05-31
- opencv-12-高斯滤波-双边滤波(附C++代码实现) 2020-05-10
- 二叉排序树 2020-05-02
- 抽象宠物类的实现 代码参考 2020-04-29
- 虚函数实现多态性 代码参考 2020-04-28
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash