zoukankan      html  css  js  c++  java
  • 数据结构60:折半插入排序算法(折半排序算法)

    上一节介绍了直接插入排序算法的理论实现和具体的代码实现,如果你善于思考就会发现该算法在查找插入位置时,采用的是顺序查找的方式,而在查找表中数据本身有序的前提下,可以使用折半查找来代替顺序查找,这种排序的算法就是折半插入排序算法。


    该算法的具体代码实现为:

    #include <stdio.h>
    void print(int a[], int n ,int i)
    {
        printf("%d:",i);
        for(int j=0; j<8; j++)
       { printf(
    "%d", a[j]); } printf(" "); } void BInsertSort(int a[], int size)
    {
    int i, j, low = 0, high = 0, mid; int temp = 0; for (i=1; i<size; i++)
       { low
    = 0; high = i-1; temp = a[i]; // 采用折半查找法判断插入位置,最终变量 low 表示插入位置 while (low <= high)
         { mid
    = (low + high) / 2; if (a[mid] > temp)
           { high
    = mid - 1; }
           else
           { low = mid + 1; } }
    // 有序表中插入位置后的元素统一后移 for (j=i; j>low; j--)
         { a[j]
    = a[j-1]; } a[low] = temp;  // 插入元素 print(a, 8, i); } }
    int main()
    {
    int a[8] = {3,1,7,5,2,4,9,6}; BInsertSort(a, 8);
    return 0; }

    运行结果为:
    1:13752496 2:13752496 3:13572496 4:12357496 5:12345796 6:12345796 7:12345679

    折半插入排序算法相比较于直接插入排序算法,只是减少了关键字间的比较次数,而记录的移动次数没有进行优化,所以该算法的时间复杂度仍是 O(n2)

  • 相关阅读:
    dudu把博客园搞成中国的stackoverflow就牛x大了
    微雨燕双飞,落花人独立 。是什么意思
    Fill Value To List : XML Bean Property « Spring « Java
    Ruby SQLite GUI
    工作流现状
    Windows Phone开发(32):路径之PathGeometry
    《论道HTML5》内容技术分享活动
    Windows Phone开发(30):图形
    wp7资源调用
    Cocos2dx win7 + vs2010 配置图文详解 .
  • 原文地址:https://www.cnblogs.com/ciyeer/p/9075270.html
Copyright © 2011-2022 走看看