zoukankan      html  css  js  c++  java
  • Insertion Sort

    https://www.youtube.com/watch?v=kU9M51eKSX8 

     

     

    插入排序

    插入排序(Insertion Sort)的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。

    插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。

    算法描述

    具体算法描述如下:

    1. 从第一个元素开始,该元素可以认为已经被排序
    2. 取出下一个元素,在已经排序的元素序列中从后向前扫描
    3. 如果该元素(已排序)大于新元素,将该元素移到下一位置
    4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
    5. 将新元素插入到下一位置中
    6. 重复步骤2~5

    主意,这个和 selection sort 很像,insertion sort 是从后往前, selection sort 是从前往后。 

     1 public class InsertionSort {
     2     public int[] sort(int[] arr){
     3         if (arr == null) return arr ;
     4         //默认第一位(5)已经SORT 好,从第二位(1)开始 倒着往回比较: 如果比 5 小 则把 5 换过来
     5         // 5 1 3 6 4
     6         for (int i = 1; i < arr.length; i++) {
     7             //倒序  J>0 因为下面 有 arr[j-1] 千万小心
     8             for (int j = i; j >0; j--) {
     9                 //swap  5 1  to 1 5
    10                 if (arr[j]<arr[j-1]){
    11                     int temp = arr[j-1];
    12                     arr[j-1] = arr[j];
    13                     arr[j] = temp ;
    14                 }
    15             }
    16         }
    17         return arr ;
    18     }
    19 
    20     public static void main(String[] args) {
    21         InsertionSort insertionSort = new InsertionSort() ;
    22         int[] arr = new int[]{5,1,3,6,4} ;
    23         int[] res =  insertionSort.sort(arr) ;
    24         Arrays.stream(res).forEach(a-> System.out.println(a));
    25     }
    26 }

  • 相关阅读:
    MAC OpenGL 环境搭建
    C++中调用OC代码
    XCode快捷键使用
    【iOS】史上最全的iOS持续集成教程 (下)
    【iOS】史上最全的iOS持续集成教程 (上)
    pod 指令无效
    iOS面试题总结(持续更新)
    数据结构与算法思维导图
    Swift编码规范总结
    同步异步执行问题
  • 原文地址:https://www.cnblogs.com/davidnyc/p/8621397.html
Copyright © 2011-2022 走看看