- 选择排序
- 插入排序
- 冒泡排序
- 希尔排序
- 归并排序
- 快速排序及优化
对于100000000/ 1亿个int型数组排序
简单测试排序时间,目前测试结果
Shell Sort : 40.211 s
Quick Sort : 39.22 s
希尔排序与快速排序两者不相上下
对于500000000/ 5亿个int型数组排序
简单测试排序时间,目前测试结果
Shell Sort : 275.252 s
Quick Sort : 240.029 s
#define _CRT_SECURE_NO_WARNINGS
#define _SCL_SECURE_NO_WARNINGS
#include <iostream>
#include <ctime>
#include <cassert>
#include <string>
#include <algorithm>
using namespace std;
//随机数生成
int *generateRandomArray(int n, int rangeL, int rangeR) {
assert(rangeL <= rangeR);
int *arr = new int[n];
srand((unsigned)time(NULL));
for (int i = 0; i < n; i++)
arr[i] = rand() % (rangeR - rangeL + 1) + rangeL;
return arr;
}
//排序检验
template<typename T>
bool isSorted(T arr[], int n) {
for (int i = 0; i < n - 1; i++)
if (arr[i] > arr[i + 1])
return false;
return true;
}
//时间测试
template<typename T>
void testSort(const string &sortName, void(*sort)(T[], int), T arr[], int n) {
clock_t startTime = clock();
sort(arr, n);
clock_t endTime = clock();
assert(isSorted(arr, n));
cout << sortName << " : " << double(endTime - startTime) / CLOCKS_PER_SEC << " s" << endl;
return;
}
//数组复制
int *copyIntArray(int a[], int n) {
int *arr = new int[n];
copy(a, a + n, arr);
return arr;
}
//打印
template<typename T>
void printArray(T arr[], int n) {
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
cout << endl;
return;
}
//选择排序
template<typename T>
void selectionSort(T arr[], int n) {
for (int i = 0; i < n; i++) {
int minIndex = i;
for (int j = i + 1; j < n; j++)
if (arr[j]