直接插入排序(java)

基本原理

1 核心思想:插入排序通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入 ,如此重复,直至完成序列排序。
2 算法分析:
 从序列第一个元素开始,该元素可以认为已经被排序
 取出下一个元素,设为待插入元素,在已经排序的元素序列中从后向前扫描,   如果该元素(已排序)大于待插入元素,将该元素移到下一位置。
 重复步骤2,直到找到已排序的元素小于或者等于待排序元素的位置,插入元素
 重复2,3步骤,完成排序。

3.动态图展示

时间复杂度: 

(1)顺序排列时,只需比较(n-1)次,插入排序时间复杂度为O(n);
(2)逆序排序时,需比较n(n-1)/2次,插入排序时间复杂度为O(n^2);
(3)当原始序列杂乱无序时,平均时间复杂度为O(n^2)。空间复杂度:

插入排序过程中,需要一个临时变量temp存储待排序元素,因此空间复杂度为O(1)。

算法稳定性:  插入排序是一种稳定的排序算法。

 

4.代码展示

 1 package sort;
 2 
 3 public class InsertionSort {
 4      
 5     public static void insertionSort(int[] a) {
 6         int tmp;
 7         for (int i = 1; i < a.length; i++) {
 8             for (int j = i; j > 0; j--) {
 9                 if (a[j] < a[j - 1]) {
10                     tmp = a[j - 1];
11                     a[j - 1] = a[j];
12                     a[j] = tmp;
13                 }
14             }
15         }
16     }
17  
18     public static void main(String[] args) {
19         int[] a = new int[]{3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};
20 
21         insertionSort(a);
22         for (int i : a)
23             System.out.print(i + " ");
24     }
25 }

 

posted @ 2020-08-19 19:13  兔奶糖  阅读(259)  评论(0)    收藏  举报