zoukankan      html  css  js  c++  java
  • [C语言] 选择排序之直接选择排序的特性及实现

    [C语言] 选择排序之直接选择排序的特性及实现

     

    1、算法特性

      直接选择是一种简单、不稳定的选择排序方法,属于最为基础的排序方法之一。

      其时间复杂度最好情况为O(n²)、最差为O(n²)、平均为O(n²),空间复杂度为O(1)。

     

    2、算法思路:

      以升序排列为例,先设置一个临时变量index_nmax存储最大值的下标,初始一般假设为下标0,再将选定值与其之后的数据依次比较:当比较值比选择值大时,index_nmax更新为比较值的下标,之后继续检索,直到无序序列结束为止;当比较值小于等于插入值时,index_nmax不更新,选择值继续向后检索,直到无序序列结束为止。一轮循环过后将arr[index_nmax]与无序序列队尾交换位置,经过len-1循环便可以将所有数据排列有序。

      下图与本博客算法本质上是相同的,博客中选择最大值来排序,图中是选择最小值来排序:

     

    3、实现代码

     1 #include <stdio.h>
     2 
     3 // 选择排序:相邻两个元素进行比较,把大的元素的下标记录下来,一轮完整的比较之后,若最大值的下标不是len-i,则两个元素交换位置
     4 void select_sort(int arr[],int len)
     5 {
     6     for(int i=0; i<len; i++) // 总共要找len-1次最大值,每次找最大值的区间 [0,len-i]
     7     {
     8         int index_nmax = 0;
     9         for(int j=1; j<len-i; j++) // 因为假设了0下标就是最大值,所以循环可以从1开始
    10         {
    11             if(arr[j] > arr[index_nmax])
    12             {
    13                 index_nmax = j;
    14             }
    15         }        
    16         if(index_nmax != len-i-1) // 避免无意义的位置交换
    17         {
    18             int tmp = arr[index_nmax];
    19             arr[index_nmax] = arr[len-i-1];
    20             arr[len-i-1] = tmp;
    21         }
    22     }    
    23 }
    24 
    25 int main()
    26 {
    27     int arr[] = {53,82,9,233,43,14,55,9,4,67};
    28     int len = sizeof(arr)/sizeof(arr[0]);
    29 
    30     travel(arr,len);
    31     select_sort(arr,len);
    32     travel(arr,len);
    33 
    34 /*  travel(arr,len);
    35     cooktail_sort(arr,len);
    36     travel(arr,len);*/
    37 
    38     return 0;
    39 }

     

    4、测试结果

  • 相关阅读:
    linux日常管理-screen
    linux日常管理-xarge_exec
    linux日常管理-linux日志
    linux日常管理-系统服务
    linux命令-任务计划-cron
    linux日常管理-防火墙netfilter工具-iptables-3
    linux日常管理-防火墙netfilter工具-iptables-2
    开启80端口
    linux日常管理-防火墙netfilter工具-iptables-1
    随机4位验证码
  • 原文地址:https://www.cnblogs.com/usingnamespace-caoliu/p/9428115.html
Copyright © 2011-2022 走看看