前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >排序算法-选择排序

排序算法-选择排序

作者头像
武培轩
发布2018-04-18 17:13:30
1.6K0
发布2018-04-18 17:13:30
举报
文章被收录于专栏:武培轩的专栏武培轩的专栏

算法简介

选择排序就是找到数组中最小元素将其和数组第一个元素交换位置,然后在剩下的元素中找到最小元素并将其与数组第二个元素进行交换,以此类推,直至整个数组排序结束。

算法描述

  • 找到数组中最小元素并将其和数组第一个元素交换位置
  • 在剩下的元素中找到最小元素并将其与数组第二个元素交换,直至整个数组排序
选择
选择

代码实现

代码语言:javascript
复制
    /**
     * 选择
     *
     * @param array
     */
    private static void selectionSort(int[] array) {
        if (array == null || array.length == 0 || array.length == 1)
            return;
        int min;
        for (int i = 0; i < array.length - 1; i++) {
            min = i;
            for (int j = array.length - 1; j > i; j--) {
                if (array[j] < array[min])
                    min = j;//将最小数的索引保存
            }
            //最小元素与第i位置元素互换
            if (array[i] > array[min]) {
                int temp = array[i];
                array[i] = array[min];
                array[min] = temp;
            }
        }
    }

性能分析

最好情况:交换 0 次,但是每次都要找到最小的元素,因此时间复杂度为$ O(n^2) $。

最坏情况:交换 \(n-1\)次,但是每次都要找到最小的元素,因此时间复杂度为$ O(n^2) $。

平均情况下时间复杂度为$ O(n^2) $。

因为需要一个临时变量来交换元素位置和一个变量记录最小位置,(另外遍历序列时自然少不了用一个变量来做索引),所以其空间复杂度为\(O(1)\)。

由于每次都是选取未排序序列R中的最小元素 a 与 R 中的第一个元素交换,很可能破坏了元素间的相对位置,因此选择排序是不稳定的。

排序算法

平均时间复杂度

最好情况

最坏情况

空间复杂度

稳定性

选择排序

\(O(n^2)\)

\(O(n^2)\)

\(O(n^2)\)

\(O(1)\)

不稳定

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-03-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 算法简介
  • 算法描述
  • 代码实现
  • 性能分析
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档