排序算法-折半插入排序

折半插入排序

一、概述

  • 折半(二分)插入排序是一种在直接插入排序算法上进行小改动的排序算法。其与直接排序算法最大的区别在于查找插入位置时使用的是二分查找的方式,在速度上有一定提升。
  • 但是,在查找二分点的时间上的时间损耗,导致了这个算法并不能比直接插入排序优秀多少,除非你有十分确切的数据大小和随机访问迭代器。
  • 折半插入排序的排序思路是:顺序地把待排序的序列中的各个元素按其关键字的大小,通过折半查找插入到已排序的序列的适当位置。

二、算法实现

#include 
/*
折半插入排序的排序思路是:
	顺序地把待排序的序列中的各个元素按其关键字的大小,
	通过折半查找插入到已排序的序列的适当位置。
*/

//对 value[0] —value[n-1] 按递增顺序进行折半排序 
void binary_insert_sort(int value[],int n)
{
	int i,j,low,high,mid;
	int temp;
	
    for(int i=1; i=high+1; j--)
			value[j+1] = value[j];
		//插入 
		value[high+1] = temp;
    }
}
int main()
{
    int value[] = {8,3,6,2,4,5,7,1,9,0};
    binary_insert_sort(value,10);
    
    printf("排序后的结果为:\n");
    for(int i=0; i<10;i++)
        printf("%d  ",value[i]);
    printf("\n");
    
    return 0;
} 

运行结果:
排序算法-折半插入排序_第1张图片

算法分析:

排序方法 时间复杂度(平均) 时间复杂度(最坏) 时间复杂度(最好) 空间复杂度 稳定性
折半插入排序 O(n2) O(n2) O(nlog2n) O(1) 稳定

你可能感兴趣的:(C++(面试&笔试),排序算法,折半插入排序)