zoukankan      html  css  js  c++  java
  • 选择排序

    1. 选择排序
      • 是一种简单直观的排序算法,它也是一种交换排序算法,和冒泡排序有一定的相似度,可以认为选择排序是冒泡排序的一种改进。
      • 表现最稳定的排序算法之一,因为无论什么数据进去都是O(n2)的时间复杂度,所以用到它的时候,数据规模越小越好。
    2. 原理
      • 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
    3. 算法描述
      • 在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。

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

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

    4. 动图演示

      在这里插入图片描述

    5. 代码实现
      public static void selectionSort(int[] arr) {
          int temp, min = 0;
          for (int i = 0; i < arr.length - 1; i++) {
              min = i;
              // 循环查找最小值
              for (int j = i + 1; j < arr.length; j++) {
                  if (arr[min] > arr[j]) {
                      min = j;
                  }
              }
              if (min != i) {
                  temp = arr[i];
                  arr[i] = arr[min];
                  arr[min] = temp;
              }
          }
      }
    6. 算法分析
      • 时间复杂度
        • 最佳情况:T(n) = O(n2)

        • 最差情况:T(n) = O(n2)

        • 平均情况:T(n) = O(n2)

      • 空间复杂度:O(1)
    7. 适用场景
      • 选择排序实现也比较简单,并且由于在各种情况下复杂度波动小,因此一般是优于冒泡排序的。在所有的完全交换排序中,选择排序也是比较不错的一种算法。但是,由于固有的O(n2)复杂度,选择排序在海量数据面前显得力不从心。因此,它适用于简单数据排序。
  • 相关阅读:
    jqueryautocomplete
    了解CSS的查找匹配原理 让CSS更简洁、高效
    html5网页编码
    刚开始学习 mvc碰到的郁闷问题
    datatable 批量插入方法 求解?
    28个经过重新设计的著名博客案例(1120)
    递归调用中的return
    C++新建一个模板
    C++ 中用 sizeof 判断数组长度
    为什么MySQL选择REPEATABLE READ作为默认隔离级别?
  • 原文地址:https://www.cnblogs.com/lj1507899927/p/13285709.html
Copyright © 2011-2022 走看看