美文网首页
[图解] 选择排序

[图解] 选择排序

作者: CoderJed | 来源:发表于2018-09-12 17:36 被阅读0次

1. 图示过程


说明:此图示为未优化的选择排序示意图,意在说明原理

2. 动图展示


说明:此动图为优化后的选择排序,每趟只交换一次

3. 文字叙述过程

  • 第1趟比较:拿第1个元素依次和它后面的每个元素进行比较,如果第1个元素大于后面某个元素,交换它们,经过第1趟比较,数组中最小的元素被选出,它被排在第一位
  • 第2趟比较:拿第2个元素依次和它后面的每个元素进行比较,如果第2个元素大于后面某个元素,交换它们,经过第2趟比较,数组中第2小的元素被选出,它被排在第二位
  • ......
  • 第n-1趟比较:第n-1个元素和第n个元素作比较,如果第n-1个元素大于第n个元素,交换它们

4. Java代码实现

public static void selectionSort(int[] nums) {

    if (nums == null || nums.length < 2) {
        return;
    }

    for(int i = 0; i < nums.length - 1; i++) {
        for(int j = i + 1; j < nums.length; j++) {
            if(nums[i] > nums[j]) {
                swap(nums, i, j);
            }
        }
    }

}

public static void swap(int[] arr, int i, int j) {
    int temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}

5. 复杂度

  • 时间复杂度:O(n²)
  • 空间复杂度:O(1),只需要一个附加程序单元用于交换
  • 稳定性:选择排序是不稳定的排序算法,因为无法保证值相等的元素的相对位置不变,例如 [3, 4, 3, 1, 5]这个数组,第一次交换,第一个3和1交换位置,此时原来两个3的相对位置发生了变化。

6. 优化

上面的算法的缺点:在每趟比较过程中,一旦发现某个元素比第1位的元素小,就交换它们,但这是没必要的,徒增了交换的次数。
优化:选择排序的核心是,在每趟比较中,找到本趟中最小的元素放在本趟比较的第1个位置,所以选择排序的每趟比较只需要交换一次即可,只要找到本趟比较中最小的元素和本趟比较中第1位置的元素交换即可。

public static void selectionSort(int[] nums) {

    if (nums == null || nums.length < 2) {
        return;
    }

    for(int i = 0; i < nums.length - 1; i++) {
        int minIndex = i;
        for(int j = i + 1; j < nums.length; j++) {
            if(nums[i] > nums[j]) {
                minIndex = nums[j] < nums[minIndex] ? j : minIndex;
            }
        }
        swap(nums, i, minIndex);
    }

}

相关文章

  • iOS实现冒泡排序、快速排序、选择排序、希尔排序、插入排序等算法

    1、冒泡排序 图解: 2、选择排序 图解: 3、快速排序 图解: 4、插入排序 图解: 5、希尔排序 图解: 6、...

  • java快速学习排序---选择排序

    1.java实现选择排序 (1)、图解选择排序 (2)、选择排序的思想 选择排序首先在未排序序列中找到最小(大)元...

  • 2018-05-10

    算法图解 p28 选择排序

  • [图解] 选择排序

    1. 图示过程 说明:此图示为未优化的选择排序示意图,意在说明原理 2. 动图展示 说明:此动图为优化后的选择排序...

  • Android面试-算法学习

    排序 选择排序 主要思想 在未排序序列中找出最小的元素,添加到有序序列中。 选择排序图解 思路: 将整个序列分为无...

  • 算法图解-选择排序

    1. 链表- 链表中的元素可存储在内存的任何地方。而数组的元素都在一起- 链表的每个元素都存储了下一个元素的地址,...

  • 数据结构

    Q:堆排序 A:1 堆排序算法(图解详细流程)2 堆排序 Q:排序算法时间复杂度与稳定性 选择排序为什么不稳定:举...

  • Schedule

    WeekComputer Science算法图解剑指offer神经网络1Data Manipulation选择排序...

  • N^2排序算法总结.md

    选择排序 算法的图解 算法的基本实现 根据上面的gif图可以得到,实现选择排序需要两个步骤 找到第i个元素后的最小...

  • 《算法图解》笔记——选择排序

    数组和链表 数组链表读取O(1)O(n)插入O(n)O(1)删除O(n)O(1) (仅当能够立即访问到要删除的元素...

网友评论

      本文标题:[图解] 选择排序

      本文链接:https://www.haomeiwen.com/subject/bhkbgftx.html