排序算法(1) —— 直接插入排序及其改进

来源:互联网 发布:什么是淘宝账号 编辑:程序博客网 时间:2024/06/07 03:08

参考文章: http://blog.csdn.net/yexinghai/archive/2009/10/10/4649923.aspx

该文章对插入排序的算法,是错误的。

 

 

直接插入排序

原理:将数组分为无序区和有序区两个区,然后不断将无序区的第一个元素按大小顺序插入到有序区中去,最终将所有无序区元素都移动到有序区完成排序。

要点:设立哨兵,作为临时存储和判断数组边界之用。

实现:(我重新写了一个)

 

 

我们可以看到将无序区域的一个元素插入一个有序的时候,上述代码是一个一个比较,并且移位。将一个元素插入一个有序的序列,是否可以利用二分查找优化呢。于是,我又对上述代码进行了改进:

 

 

知识点:

1、memcpy不考虑重叠的情况;memmove考虑了重叠的情况。

2、int *pi; char *pc; void *pv; 假设指针的初始化的值都是0x0012ff40。

   则pi+1的值是0x0012ff44; pc+1的值是0x0012ff41; pv+1编译错误,未知大小(类型)。针对32位系统。

3、对插入排序算法的优化。

4、对该插入的位置查找,二分查找的变种。

再给出一个标准二分查找算法:

 

 

 

原创粉丝点击