SortHelper.h
#ifndef SECTIONSORT_SORTHELPER_H
#define SECTIONSORT_SORTHELPER_H
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <cassert>
using namespace std;
namespace SortHelper {
/**
* 生成数量为n,范围从rangeLeft到rangeRight的数组[rangeLeft,rangeRight]
* @param n 数量
* @param rangeLeft 左边界值
* @param rangeRight 右边界值
* @return 数量为n,范围从rangeLeft到rangeRight的数组
*/
int *generateRandomArray(int n, int rangeLeft, int rangeRight) {
assert(rangeLeft <= rangeRight); //左边界值小于等于右边界抛异常
int *arr = new int[n]; //新建大小为n的数组
srand(time(NULL)); //设置随机数种子
for (int i = 0; i < n; i++)
arr[i] = rand() % (rangeRight - rangeLeft + 1) + rangeLeft; //为数位生成rangeLeft到rangeRight区间内的值
return arr;
}
/**
* 打印数组
* @tparam T 数组的类型
* @param arr 数组
* @param n 数组的长度
*/
template<typename T>
void printArray(T arr[], int n) {
for (int i = 0; i < n; ++i)
cout << arr[i] << " ";
cout << endl;
return;
}
}
#endif
main.cpp
#include <iostream>
#include "SortHelper.h"
using namespace std;
/**
* 选择排序
* @tparam T 数组类型
* @param arr 数组
* @param n 数组长度
*/
template<typename T>
void selectionSort(T arr[], int n) {
for (int i = 0; i < n; i++) {
int minIndex = i; //比较当前最小值与下标为j的值
for (int j = i + 1; j < n; ++j)
if (arr[j] < arr[minIndex]) //比较当前最小值与下标为j的值
minIndex = j;
swap(arr[i], arr[minIndex]); //交换下标为i与最小值下标的值
}
}
int main() {
int n = 10000;
int *arr = SortHelper::generateRandomArray(n, 0, n); //生成随机数组
selectionSort(arr, n); //对数组进行选择排序
SortHelper::printArray(arr, n); //打印数组
delete[] arr; //释放数组的空间
return 0;
}