排序之一:选择排序

  • 介绍
    选择排序法第一次扫描会找出最大或者最小值,放到正确的位置;第二次扫描会在剩余数据找出最大或者最小值,放到正确位置;以此类推,直到扫描完成;
  • 演示
    代码如下:
private static void selectSort() {
    int data[] = {6, 4, 8, 1, 3, 7, 2, 9, 5};
    int i, j, tmp;
    for (i = 0; i < data.length - 1; i++) {
        for (j = i + 1; j < data.length; j++) {
            if (data[i] > data[j]) {
                tmp = data[j];
                data[j] = data[i];
                data[i] = tmp;
            }
        }
    }
}

打印结果:


选择排序打印结果.png
  • 分析
  1. 无论是最坏情况、最佳情况还是平均情况都需要找到最大值(或最小值),因此其比较次数为n(n-1)/2次;时间复杂度为O(n²);
  2. 由于选择排序是以最大或最小值直接与最前方未排序的键值交换,数据排序顺序很有可能被改变,所以不是稳定排序法;
  3. 只需要一个额外的控件,所以空间复杂度为最佳;
  4. 此排序法适用于数据量小或者有部分数据已经排序过的情况。

其他排序:插入排序冒泡排序希尔排序快速排序基数排序

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,354评论 0 33
  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 10,592评论 0 52
  • 概述:排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    每天刷两次牙阅读 9,087评论 0 15
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好...
    依依玖玥阅读 5,030评论 0 2
  • 查找和排序都是程序设计中经常用到的算法。查找相对而言较为简单,不外乎顺序查找、二分查找、哈希表查找和二叉排序树查找...
    eagleRock阅读 10,927评论 0 14