美文网首页
选择排序算法(C++版)

选择排序算法(C++版)

作者: lkmc2 | 来源:发表于2017-12-10 01:15 被阅读12次

    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;
    }
    

    相关文章

      网友评论

          本文标题:选择排序算法(C++版)

          本文链接:https://www.haomeiwen.com/subject/qnlmixtx.html