折半插入排序算法(C语言代码实现)

2021年1月17日   |   by tgcode

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

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

#include 
void print(int a[], int n ,int i){
    printf("%d:",i);
    for(int j=0; jtemp) {
                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)

相关推荐: AOE网求关键路径详解(包含C语言实现代码)

在学习拓扑排序一节时讲到拓扑排序只适用于 AOV 网,本节所介绍的求关键路径针对的是和 AOV 网相近的 AOE 网。 什么是AOE网 AOE 网是在 AOV 网的基础上,其中每一个边都具有各自的权值,是一个有向无环网。其中权值表示活动持续的时间。 图 1 A…

Tags: