还是排序,上一篇讲的是排序大家庭中的直接插入排序,今天呢,主要讲的是折半插入排

序。实现起来,还是蛮简单的,没有太多的拐弯抹角的,不会伤害很多脑细胞的。人家都

说了,编程,如何提高自己的编程技术呢?那就是多写代码,如何写呢?就是抛开课本,拿着

笔和纸,现在纸上走一遍算法(这个前提是算法思想已经熟透了),然后,在写出来,编译,

运行。就是这样。很简单的。其实,在写这些简单的算法的时候,没有太多的技术问题,就是

一个如何提高自己的编程水平的问题,一种整体把握的能力。你能一次就把折半插入排序写

好,编译,运行通过吗?还好!我做到了(这里牛皮不是吹的!)。

算法思想:在顺序表中,v[0], v[1], v[2],……v[n - 1], v[n],而前n个数是已经排好的,现

在你的任务就是用折半排序将v[n]插入到已经排好的序列中。现在开始,定位。iLeft表示最左

边元素的位置,iRight表示最右边元素的位置,看好了,是位置,而不是值。iLeft = 0;

iRight = n – 1; 现在开始是定位中间位置的时候,iMiddle = (iLeft + iRight) / 2;如果v[n]比

v[iMiddle]大的话,就将iLeft = iMiddle + 1;否则,iRight  = iMiddle – 1;然后就是循环上面

的动作,就此,一个全新的折半插入排序就诞生了。

贴出代码:

注:本程序在visual studio 2008下编译通过,如有错误,请使用visual studio 2008.谢谢合作。

#include <iostream> #include <stdlib.h> using namespace std; void BinInsertSort(); //折半排序 void main() { BinInsertSort(); } void BinInsertSort() { int iNum; //参加排序的数的个数 cout<<"请输入参加排序数个数:"; cin>>iNum; //判断num的有效性 if (iNum <= 0) { cout<<"请输入正确的个数"<<endl; exit(0); } int *Array = new int[iNum]; //动态开辟数组存放排序的数 for (int i = 0; i < iNum; i++) { cin>>Array[i]; int iLeft, iRight, iMiddle; int iTemp; int j; //数组循环变量 iLeft = 0; iRight = i; iTemp = Array[i]; //存放新输入的数组值,防止被覆盖 //折半排序 while (iLeft <= iRight) { iMiddle = (iLeft + iRight) / 2; //获得中间位置 //如果输入的数大于中间数,则向右走,否则向左走 if (Array[i] > Array[iMiddle]) { iLeft = iMiddle + 1; } else { iRight = iMiddle - 1; } } //移动数组值,将新值插入 for (j = i; j > iLeft; j--) { Array[j] = Array[j - 1]; } Array[j] = iTemp; } //输出排序结果 for (int m = 0; m < iNum; m++) { cout<<Array[m]<<","; } cout<<endl; }

好了,就写到这里了,如果对代码还有什么疑问,请跟帖提出,或者直接加我QQ:535064959.你我互相学习,共同提高,谢谢合作!

现在可以享受自己的成果的时候了。

转载于:https://www.cnblogs.com/JPAORM/archive/2011/03/14/2509903.html

算法不会,尚能饭否之排序——折半插入排序(Binary Insert Sort)相关推荐

  1. 算法不会,尚能饭否之排序——直接插入排序(Insert sort)

    这是春节过后写的第一篇博文,大家都有一样的感觉,春节过后,人都有点不想动了,说实话,我也 不想写的!没有办法.借着晚上的酒劲,就写了这篇直接排序(Insert Sort)的博文. 现在转移战场了,现在 ...

  2. C语言实现折半插入排序(Binary Insertion Sort)算法(附完整源码)

    折半插入排序Binary Insertion Sort 折半插入排序(Binary Insertion Sort)算法的完整源码(定义,实现,main函数测试) 折半插入排序(Binary Inser ...

  3. 基础排序算法(冒泡排序,选择排序,插入排序)

    最近经常调用api中的排序算法,很少自己写了,有时候也只写写快速排序这些比较快的排序,然而刚开始学排序时用的一些基本的排序算法却有点忘了 正好今天Java老师让我们每个人写个选择排序热热手,趁这个机会 ...

  4. Python排序算法(一)冒泡排序、选择排序、插入排序

    今天总结一下Python中的排序算法.这篇文章有的排序算法是:冒泡排序.选择排序.插入排序. 冒泡排序 先看一下代码. ''' 冒泡排序 '''def bubble_sort(aList):n = l ...

  5. 十大排序算法:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序

    冒泡排序.选择排序.插入排序.希尔排序.归并排序.快速排序.堆排序.计数排序.桶排序.基数排序的动图与源代码. 目录 关于时间复杂度 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 ...

  6. 排序算法(冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、基数排序)

    排序也叫排序算法,排序是将一组数据,依指定的顺序进行排列的过程. 排序的分类: 1)内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序. 2)外部排序:数据量过大,无法全部加载到内存中,需要 ...

  7. python遍历数组冒泡排序_经典排序算法(冒泡排序,选择排序,插入排序,快速排序,堆排序)python实现...

    最近在复习经典排序算法,自己用python也实现了一下,这里不会涉及到原理(因为网上方法已经很详细啦),就把函数贴上来,可以让大家自己试着运行下,再结合别处的原理也可以更好地理解它们的实现. 如果有错 ...

  8. 【排序】插入类排序—(折半)插入排序、希尔排序

    前言 在数据结构和算法中,排序是非常重要的一环,并且排序也是渗透编程的方方面面. 你或许在写一个sql的order by按照某组进行排序,又或者你在刷一道题时候.常常遇到贪心+自定义排序求解的思路题, ...

  9. java冒泡排序_JAVA实现经典排序算法(冒泡排序、选择排序、插入排序、希尔排序、堆排序、归并排序、快速排序)...

    冒泡排序 依次比较相邻的元素,若发现逆顺序,则交换.小的向前换,大的向后换,本次循环完毕之后再次从头开始扫描,直到某次扫描中没有元素交换,说明每个元素都不比它后面的元素大,至此排序完成. import ...

最新文章

  1. python django mysql安装_Django+Nginx+uWSGI+Mysql搭建Python Web服务器
  2. 【Python】Pandas基础:结构化数据处理
  3. 如何通过github提升自己
  4. arcgis批量处理nc文件_气象数据处理——nc文件
  5. CompletableFuture详解~thenAccept
  6. NLP论文 -《Distributed Representations of Sentences and Documents》-句子和文档的分布式表示学习(二)
  7. mysql与php驱动程序_用PHP和MySQL构建一个数据库驱动的网站_php
  8. 扇贝python课程免费_扇贝新推出的python课程值得买吗?
  9. win10鼠标主题linux,win10系统安装鼠标指针主题包的操作方法
  10. 【I.MX6ULL】6ull 加载 linux 驱动模块失败
  11. 栈(Stack)——后进先出(LIFO)的数据结构(Data Structures)
  12. 身份实名认证API开发文档
  13. mybatis-动态sql动态bean实例
  14. 超市销售数据分析python、求某一个人的营业额总和_Python+pandas使用交叉表分析超市营业额数据!这超市怕是!...
  15. 衬线字体和无衬线字体
  16. 国立台湾大学_郭彦甫老师_MATLAB课程练习
  17. java 火车票_Java 面向对象 之 接口 火车票实例
  18. 计算机机房综合布线预算表,综合布线工程预算表.ppt
  19. squirrelSql小松鼠数据库连接工具的安装以及连接informix(系列3,squirrelSql作为客户端连接)
  20. Web前端之网页导航----126邮箱(关于position)

热门文章

  1. 紫书搜索 习题7-6 UVA - 12113 Overlapping Squares 暴力
  2. git将本地仓库推送到远程仓库
  3. 跑步与读书都废掉了...工作目前也在换新的.
  4. 拼接字符串时的引号嵌套
  5. IIS故障:World Wide Web Publishing无法启动 提示1721错误
  6. 【必备干货】1000字讲清3大财务数据表
  7. python学习——numpy库
  8. mono for android定义,2.1.3 使用Mono for Android的原因
  9. matlab第二版实验七,matlab实验七.doc
  10. hbase shell远程连接_HBase安装详解