选择排序与插入排序

Posted 不做油腻的中年大叔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了选择排序与插入排序相关的知识,希望对你有一定的参考价值。

选择排序

一、思想

  • 遍历一次数组,从数组中找到最小的那个,放在0位置(与其交换)

  • 再遍历一次数组,从数组中找到次小的那个,放在1位置

  • 直到整体有序

二、代码

public static void selectionSort(int[] arr){
       if(arr == null || arr.length < 2){
           return;
      }
       for(int i = 0; i < arr.length; i++){
           int min = i;//从每次遍历的第一个开始
           for(int j = i; j < arr.length; j++){
               //实现做到稳定
               min = (arr[min] > arr[j]) ? j : min;
          }
           Util.swap(arr, min , i);
      }
  }

三、复杂度

实现可以做到稳定性,时间上严格O(n^2),空间上O(n)

插入排序

一、思想

将数组中的一个元素挨个插入到其前面有序的序列中

二、代码

public static void insertSort(int[] arr){
       if(arr == null || arr.length < 2){
           return;
      }
       for(int i = 1; i < arr.length; i++){
           for(int j = i; j > 0; j--){
               if(arr[j - 1] < arr[j]){//前面部分是有序的
                   break;
              }
               Util.swap(arr, j ,j-1);
          }
      }
  }

三、复杂度

实现可以做到稳定性,空间O(1),但在时间复杂度上与冒泡和选择排序不同,如果情况不同:

  • 待排序数组为[1, 2, 3, 4, 5],时间复杂度为O(n)

  • 待排序数组为[5, 4, 3, 2, 1],时间复杂度为O(n^2)


以上是关于选择排序与插入排序的主要内容,如果未能解决你的问题,请参考以下文章

python 数据结构与算法之排序(冒泡,选择,插入)

排序3-插入选择排序

java常见排序算法--选择排序冒泡排序插入排序分析与比较

选择排序和插入排序

插入排序(JS代码)

Java集合与数据结构 排序