排序算法-选择排序

Posted 异次猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法-选择排序相关的知识,希望对你有一定的参考价值。

选择排序

选择排序的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完.选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面).

算法步骤

  • 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置.

  • 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾.

  • 重复第二步,直到所有元素均排序完毕. 

算法复杂度

时间复杂度:O(n^2), 无论什么数据进去都是O(n^2)的时间复杂度. 空间复杂度:O(1)

算法实现

选择排序元素从小到大排列的算法实现

 
   
   
 
  1. /**

  2. * 选择排序算法

  3. * @param arr 待排序数组

  4. */

  5. public static void selection(int arr[]){

  6.    // 外循环, 要处理的数据所在位置

  7.    for(int i = 0; i < arr.length - 1; i++){

  8.        int min = i;

  9.        // 内循环, 寻找未排序元素集中的最小值

  10.        for(int j = i + 1 ; j < arr.length; j++){

  11.            if(arr[j] < arr[min]){

  12.                // 记录最小值位置

  13.                min = j;

  14.            }

  15.        }

  16.        // 待处理的位置上不是最小值,将最小值交换到该位置上

  17.        if(i != min){

  18.            int tmp = arr[i];

  19.            arr[i] = arr[min];

  20.            arr[min] = tmp;

  21.        }

  22.    }

  23. }

数据示例

初始序列:70 80 31 37 10 1 48 60 33 80

 
   
   
 
  1. 1趟:  [1] 80 31 37 10 70 48 60 33 80  

  2. 2趟:  [1 10] 31 37 80 70 48 60 33 80  

  3. 3趟:  [1 10 31] 37 80 70 48 60 33 80  

  4. 4趟:  [1 10 31 33] 80 70 48 60 37 80  

  5. 5趟:  [1 10 31 33 37] 70 48 60 80 80  

  6. 6趟:  [1 10 31 33 37 48] 70 60 80 80  

  7. 7趟:  [1 10 31 33 37 48 60] 70 80 80  

  8. 8趟:  [1 10 31 33 37 48 60 70] 80 80  

  9. 9趟:  [1 10 31 33 37 48 60 70 80] 80  

  10. 果:  [1 10 31 33 37 48 60 70 80 80]  



以上是关于排序算法-选择排序的主要内容,如果未能解决你的问题,请参考以下文章

排序算法之冒泡选择插入排序(Java)

选择排序(简单选择排序堆排序的算法思想及代码实现)

《算法》笔记 3 - 选择排序插入排序希尔排序

Java数据结构—排序算法

在第6731次释放指针后双重免费或损坏

三大基础排序算法(冒泡排序,选择排序,插入排序)