• <排序算法> 简单选择排序SelectSort


    1.核心思想:
    每一趟在n-i+1中选取关键字最小的记录作为有序序列的第i个记录。
    简单排序最大的特点就是交换移动次数相当少,这样就节约了时间。通过分析时间复杂度
    也就是说如果从小到大进行排序,找最大的往后放或者找最小的往前放。简单选择排序没有优化,对数组没有要求。有序或者无序都没有差别。
    2.代码实现:

     1 #include<iostream>
     2 using namespace std;
     3 
     4 void PrintArr(int arr[],int len);
     5 void SelectSort(int arr[],int len)
     6 {
     7     if(arr == NULL || len <= 0)    return ;
     8     int i,j,min;
     9     for(i=0;i<len;i++)
    10     {
    11         min = i;
    12         for(j=i+1;j<len;j++)
    13         {
    14             if(arr[j] < arr[min]) //如果循环到的这个arr[j]比min还小的话 就更换min的值
    15             {
    16                 min = j;
    17             }
    18         }
    19         if(min != i)
    20         {
    21             int t = arr[min];
    22             arr[min] = arr[i];
    23             arr[i] = t;
    24         }
    25     }
    26 
    27     return ;
    28 }
    29 
    30 void PrintArr(int arr[],int len)
    31 {
    32     for(int i=0;i<len;i++)
    33         cout << arr[i] << " ";
    34     cout << endl;
    35 
    36     return ;
    37 }
    38 
    39 int main()
    40 {
    41     //int arr[10] = {9,8,7,6,5,4,3,2,1,0};
    42     int arr[10] = {4,8,6,3,7,2,9,5,0,1};
    43     SelectSort(arr,sizeof(arr)/sizeof(arr[0]));
    44     PrintArr(arr,sizeof(arr)/sizeof(arr[0]));
    45 
    46     system("pause");
    47     return 0;
    48 }

    3.时间复杂度:
    简单排序最大的特点就是交换移动次数相当少,这样就节约了时间。通过分析时间复杂度,无论最好最差,其比较次数都一样多,简单选择排序没有优化,对数组没有要求。
    比较次数:(n*(n-1))/2;
    交换次数:最好0次,最差n-1次;
    基于最终的排序时间是比较与交换的次数总和,因此总的时间复杂度为O(n2)。
    虽然和冒泡排序的时间复杂度一样,但是简单选择排序的性能还是要略优与冒泡排序的。

  • 相关阅读:
    数据结构之链表——加里森的任务(循环链表)
    数据结构之队列——回文字判断
    数据结构之栈——二进制转十进制
    《爱的艺术》人类超越了本能
    从一个Activity返回上一个Activity
    VS(C++)编程遇到的错误集合
    C++(MFC)编程一些注意事项
    Tomcat部署(进行web服务器开发)
    本地IP与宽带IP
    opencv的Mat图像显示在MFC控件中
  • 原文地址:https://www.cnblogs.com/Aaaaaalei0612/p/11218775.html
Copyright © 2020-2023  润新知