每日轻松学算法(插入)

1. 原理

  • 将一个记录插入到已排好序的序列中,从而得到一个新的有序序列(将序列的第一个数据看成是一个有序的子序列,然后从第二个记录逐个向该有序的子序列进行有序的插入,直至整个序列有序)

2. 思路

一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:

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

3. 动图演示

每日轻松学算法(插入)_第1张图片

4. 代码实现

package cn.itcast;

public class InsertionSort {
     
    public static void main(String[] args) {
     
        //定义整形数组
        int arr[]={
     3,38,5,44,15,36,26,27,2,47,46,4,19,50,48};
        //调用插入排序方法
        int arrays[]=insertSort(arr);
        //遍历输出结果
        for (int a : arrays) {
     
            System.out.print(a+" ");
        }
    }
    //插入排序
    public static int[] insertSort(int[] array){
     
        if(array.length==0) return array;
        int current;
        for (int i = 0; i < array.length-1; i++) {
     
            current=array[i+1];
            int preIndex=i;
            while(preIndex>=0 && current<array[preIndex]){
     
                array[preIndex+1]=array[preIndex];
                preIndex--;
            }
            array[preIndex+1]=current;
        }
        return array;
    }
}

运行结果
在这里插入图片描述

5. 算法分析

  • 最佳情况:T(n) = O(n) 最坏情况:T(n) = O(n2) 平均情况:T(n) = O(n2)

你可能感兴趣的:(笔记)