• 选择排序的实现以及性能测试


    用C++语言实现
    选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。
    首先我们写一个用来测试的代码:

     1 #ifndef INC_03_SELECTION_SORT_DETECT_PERFORMANCE_SORTTESTHELPER_H
     2 #define INC_03_SELECTION_SORT_DETECT_PERFORMANCE_SORTTESTHELPER_H
     3 #include <iostream>
     4 #include <ctime>
     5 #include <cassert>
     6 #include <string>
     7 using namespace std;
     8 namespace SortTestHelper {
     9     // 生成有n个元素的随机数组,每个元素的随机范围为[rangeL, rangeR]
    10         int *generateRandomArray(int n, int rangeL, int rangeR) {
    11         assert(rangeL <= rangeR);
    12         int *arr = new int[n];
    13         srand(time(NULL));
    14         for (int i = 0; i < n; i++)
    15             arr[i] = rand() % (rangeR - rangeL + 1) + rangeL;
    16         return arr;
    17     }
    18     // 打印arr数组的所有内容
    19     template<typename T>
    20     void printArray(T arr[], int n) {
    21 
    22         for (int i = 0; i < n; i++)
    23             cout << arr[i] << " ";
    24         cout << endl;
    25 
    26         return;
    27     }
    28     // 判断arr数组是否有序
    29     template<typename T>
    30     bool isSorted(T arr[], int n) {
    31 
    32         for (int i = 0; i < n - 1; i++)
    33             if (arr[i] > arr[i + 1])
    34                 return false;
    35 
    36         return true;
    37     }
    38     template<typename T>
    39     void testSort(const string &sortName, void (*sort)(T[], int), T arr[], int n) {
    40 
    41         clock_t startTime = clock();
    42         sort(arr, n);
    43         clock_t endTime = clock();
    44 
    45         assert(isSorted(arr, n));
    46         cout << sortName << " : " << double(endTime - startTime) / CLOCKS_PER_SEC << " s" << endl;
    47 
    48         return;
    49     }
    50 };
    51 #endif

    然后在主函数中实现选择排序并进行测试:

     1 #include <iostream>
     2 #include "SortTestHelper.h"
     3 using namespace std;
     4 template<typename T>
     5 void selectionSort(T arr[], int n){
     6     for(int i = 0 ; i < n ; i ++){
     7         int minIndex = i;
     8         for( int j = i + 1 ; j < n ; j ++ )
     9             if( arr[j] < arr[minIndex] )
    10                 minIndex = j;
    11         swap( arr[i] , arr[minIndex] );
    12     }
    13 }
    14 int main() {
    15     int n = 20000;
    16     int *arr = SortTestHelper::generateRandomArray(n,0,n);
    17     SortTestHelper::testSort("Selection Sort", selectionSort, arr, n);
    18     delete[] arr;
    19     return 0;
    20 }
    21     

    结果分析:

    可见我们对20000个从1-----20000的随机元素进行选择排序最终用时0.667秒

  • 相关阅读:
    <爬虫实例> 8684公交网-太原公交线路信息
    <爬虫> requests模块
    爬虫四 selenium + phantomjs & Headless Chrome
    爬虫三 bs4&xpath&jsonpath
    爬虫二 cookie&正则
    爬虫一 发请求&定制请求&异常处理&配置代理
    抽屉页面设计
    HTML标签及其属性
    Python之路 day3 高阶函数
    Python之路 day3 递归函数
  • 原文地址:https://www.cnblogs.com/Tom-shushu/p/10067349.html
Copyright © 2020-2023  润新知