/*
排序总结:(基于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