版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/majinlei121/article/details/83745327
本篇文章是使用C++实现的选择排序算法,算法复杂度为O(n2)
选择排序算法初始时在序列中找到最小元素,放到序列的起始位置作为已排序序列;然后,再从剩余未排序元素中继续寻找最小元素,放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
如上图数组中有8个元素,首先将第一个元素1作为最小元素,然后遍历后面的7个元素,遍历完后如果发现有比1更小的元素,就将该元素与1互换;接下来将6作为最小元素,然后遍历后面的6个元素,如果发现有比6更小的元素,就将该元素与6互换,以此类推,直到最后。
下面是C++实现:
#include <iostream>
#include <ctime> //time()函数
#include <cstdlib> //rand()函数
#include <cassert> //assert()函数
using namespace std;
int* generateRandomArray(int n, int rangeL, int rangeR){//生成随机数组
assert(rangeL < rangeR);
int *arr = new int[n];
srand(time(NULL));//生成随机数种子
for (int i = 0; i < n; i++){
arr[i] = rand() % (rangeR - rangeL + 1) + rangeL;
}
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> //定义模板类型,使对各种数据类型都适用,如double,float,string
void SelectionSorting(T a[], int n){//选择排序算法
for (int i = 0; i < n; i++){
int minIndex = i;
for (int j = i + 1; j < n; j++){
if (a[j] < a[minIndex])
minIndex = j;
}
swap(a[i], a[minIndex]);
}
}
int main()
{
//int a[] = {10,9,8,7,6,5,4,3,2,1};
int n = 10;
int *arr = generateRandomArray(n, 0, n);
printArray(arr, n);
SelectionSorting(arr, n);
printArray(arr, n);
delete[] arr;//最后删除数组开辟的空间
return 0;
}
程序实现结果为: