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

2017-12-10  本文已影响12人  lkmc2

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;
}
上一篇下一篇

猜你喜欢

热点阅读