zoukankan      html  css  js  c++  java
  • 【DS】排序算法之选择排序(Selection Sort)

    一、算法思想

         选择排序是一种简单直观的排序算法。它的工作原理如下:

    1)将序列分成两部分,前半部分是已经排序的序列,后半部分是未排序的序列;

    2)在未排序序列中找到最小(大)元素,放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

    二、算法示意图

          图中阴影部分是未排序的序列,黄色部分是排序好的序列。第一行是待排序的初始序列,最后一行是排好序的序列。

          从第一行中选择出最小的元素1,将其和未排序序列的第一个元素交换,从而形成第二行。第二行从阴影部分找到最小的元素2,将2和阴影部分的第一个元素8交换,形成第三行。其实这个过程和冒泡排序非常相似,只是如何将下一个元素移动到排序序列的最末端的方式不一样。如此继续下去,就可以完成序列排序。

    三、Java代码

     1 //@wiki
     2 public class SelectionSort extends Sort{
     3     public static void sort(int[] array) {
     4         int temp;
     5         int min;
     6         for (int index = 0; index < array.length - 1; index++) {
     7             printArray(array);
     8             min = index;
     9             for (int next = index + 1; next < array.length; next++) {
    10                 if (array[next] < (array[min])) {
    11                     min = next;
    12                 }
    13             }
    14             temp = array[index];
    15             array[index] = array[min];
    16             array[min] = temp;
    17         }
    18     }
    19 }

          算法简单,不解释。

    四、算法复杂度

          选择排序的算法复杂度很好分析,因为从代码来看,其算法复杂度与初始序列无关,假设初始序列元素的个数为n,则算法复杂度为O(n^2),因为第10行会执行n*(n-1)/2。因此选择排序的最优/最差/平均时间复杂度都是O(n^2)。

         空间复杂度非常容易,由代码可以看出来,只需要一个位置temp用于交换即可,因此是O(1)

  • 相关阅读:
    MyEclipse Ctrl+F搜索框太小
    SqlServer2012评估期已过问题
    $("#form_iframe").contents().find('.nav-tabs').children().eq(2).hide();
    数字格式化
    equals和==的区别
    静态代码块
    this调用有参构造方法
    正则表达式
    日期和时间字符串格式化
    Legacy autograd function with non-static forward method is deprecated and will be removed in 1.3.
  • 原文地址:https://www.cnblogs.com/lqminn/p/3650088.html
Copyright © 2011-2022 走看看