你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

二分排序法

2021/12/20 1:39:32

二分排序法

运行结果:
在这里插入图片描述

思想:

1, 逐渐扩大排好序区间,用待排元素插入到排好序的序列中
2,查找待插入位置时用二分查找法

#include<iostream>

// 折半插入排序
void binarySort(int a[], int n) {
	int i, j, low, mid, high;
	for (i = 2; i < n; ++i) {
		a[0] = a[i];	// 待排元素,a[0]用来存储每次待排的元素,不参与整体排序
		low = 1; high = i - 1;	// 已排好序的区间
		while (low <= high) {		// 查找插入位
			mid = (low + high) / 2;
			if (a[mid] > a[0])
				high = mid - 1;		// 在左边
			else
				low = mid + 1;		// 在右边
		}
		for (j = i - 1; j > high; --j)
			a[j + 1] = a[j];	// 统一后移
		a[high + 1] = a[0];		// 插入元素
	}
}

// 打印函数
void display(int a[], int n) {
	for (int i = 1; i < n; ++i) {
		std::cout << a[i] << ' ';
	}
	std::cout << '\n' << std::endl;
}

int main() {
	int a[]{ 0,1,5,7,6,4 };
	int n = sizeof(a) / sizeof(a[0]);
	std::cout << "二分排序前:\n";
	display(a, n);
	binarySort(a, n);
	std::cout << "二分排序后:\n";
	display(a, n);

	return 0;
}

时间复杂度:O(n²)
空间复杂度:O(1)
稳定性: 稳定