zoukankan      html  css  js  c++  java
  • 排序算法(二)--选择排序(Select Sort)

    算法定义

      选择排序的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。

    时间复杂度

      选择排序比较时间复杂度为O(n^2),交换时间复杂度为O(n)

    算法稳定性

      选择排序是一种不稳定的排序算法,主要取决于其排序原理。

    选择排序与冒泡排序比较

      虽然选择排序与冒泡排序时间复杂度都是O(n^2),但是选择排序的交换次数较少,因此选择排序的整体性能略优于冒泡排序。(交换时间大于比较时间)

    [admin@localhost selection_sort]$ ./select 100000 0
    选择排序100000个数据,耗时9962205 usec.
    [admin@localhost selection_sort]$ ./select 100000 0
    选择排序100000个数据,耗时9996807 usec.

    [admin@localhost algorithm]$ ./bubble 100000
    排序100000个数据,耗时28781700 usec.
    [admin@localhost algorithm]$ ./bubble 100000
    排序100000个数据,耗时28952177 usec.

    C代码实现

     1 #include <stdio.h>
     2 #include <time.h>
     3 #include <string.h>
     4 #include <stdlib.h>
     5 #include <sys/time.h>
     6 
     7 #include "common.h"
     8 
     9 #define PRINT_ARRAY 1
    10 
    11 void select_sort(int *iArray, int size)
    12 {
    13     int min;
    14     for(int i = 0; i < size; i++)
    15     {
    16         min = i;
    17         for(int j = i; j < size; j++)
    18         {
    19             if(iArray[j] < iArray[min])
    20             {
    21                 min = j;
    22             }
    23         }
    24 
    25         if (min != i)
    26         {
    27             swap(&iArray[i], &iArray[min]);
    28         }
    29     }
    30 
    31     return;
    32 }
    33 
    34 int main(int argc, char *argv[])
    35 {
    36     int size = atoi(argv[1]);
    37     int isPrint = atoi(argv[2]);
    38     IntArray *pstIntArray = mallocIntArray(size);
    39     unsigned long ulTimeUse = 0;    /* usec level */
    40     struct timeval stTimeStart;
    41 
    42     memset(&stTimeStart, 0, sizeof(stTimeStart));
    43     memset(pstIntArray, 0, sizeof(IntArray));
    44 
    45     generateArray(pstIntArray->iArray, size);
    46 
    47     if (PRINT_ARRAY == isPrint)
    48     {
    49         printf("选择排序前: 
    ");
    50         printArray(pstIntArray->iArray, size);
    51     }
    52 
    53     COMMON_StartRecordTime(&stTimeStart);
    54     select_sort(pstIntArray->iArray, size);
    55     ulTimeUse = COMMON_EndRecordTime(&stTimeStart);
    56 
    57     if (PRINT_ARRAY == isPrint)
    58     {
    59         printf("选择排序后: 
    ");
    60         printArray(pstIntArray->iArray, size);
    61     }
    62 
    63     printf("选择排序%d个数据,耗时%ld usec.
    ", size, ulTimeUse);
    64 
    65     return 1;
    66 }
  • 相关阅读:
    【Office Web Apps】在 SharePoint 中使用 Office Web Apps
    css轮廓
    css定位
    css盒子模型 css3盒子相关样式
    css常用操作
    css3选择器
    强制换行和禁止换行
    text-transform 字母的大小写
    css hack
    JavaScript基本语法
  • 原文地址:https://www.cnblogs.com/taouu/p/13040084.html
Copyright © 2011-2022 走看看