数据结构与算法C++之选择排序

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}

程序实现结果为:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/majinlei121/article/details/83745327