【C++实现】基本排序算法 插入排序——归并排序——快速排序——堆排序

/*
排序总结:(基于100w随机数,有序数、重复数测试)
1、插入排序适合近乎有序的序列
2、归并排序优化:(优化前       120S)
1)数据小于15时采用插入排序 10S
2)避免频繁动态申请内存 memcpy(dest,src,sizeof(int)*len) 用static 变量      0.2S
缺点:需要O(N)的空间复杂度

3、快速排序优化:(优化前 如果序列完全有序,则程序直接栈溢出,如果序列为随机数  0.7S)
1)随机选择枢轴 可有效避免近乎有序序列排序慢的情况 尽量不用swap使用节约一次赋值的时间    0.4S
2) 数据小于15时采用插入排序  0.2S
优点:空间复杂度O(log(n))
缺点:近乎有序时效率不高

4、堆排序 :先heapify 在从小到大排
优点:空间复杂度O(1) 原地排序
*/


#include<ctime>
inline void swap2(int &a, int &b){
	int c = a;
	a = b;
	b = c;
}

//插入排序 
void insertSort(int arr[], int lo, int hi){
	for (int i = lo; i < hi; i++){
		int e = arr[i];
		int j;
		for (j = i; j >lo && e < arr[j - 1]; j--)//判断条件放在for内部会导致错误
			arr[j] = arr[j - 1];
		ar
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值