插入排序算法

插入排序是排序算法中一种经典的排序算法,该算法的时间复杂度最好时为O(n),最差时为O(n^2),空间复杂度为O(1),该算法也是一种稳定的排序算法。该种算法较适合大部分已有序时的排序问题。相比较而言,冒泡排序则更适合较小的序列排序。

该排序算法的思想是:不断地将当前数字插入到一个有序序列中,直到最后一个数字插入有序序列为止;初始时以第一个数字自成一个序列。

该算法的一种如下(Java版):

 1 /**
 2  * 插入排序
 3  * @author JiaJoa
 4  * 从第一个元素开始,该元素可以认为已经被排序
 5  * 取出下一个元素,在已经排序的元素序列中从前向后扫描 
 6  * 如果该元素(已排序)大于新元素,将该元素移到下一位置 (和新元素的位置互换)
 7  * 将新元素插入该位置
 8  * 
 9  */
10 public class Algorithm_InsertSort {
11 
12     public static void main(String[] args) {
13         // TODO Auto-generated method stub
14         int[] data = new int[]{13,8,4,2,3,5,11,9,7};
15         Algorithm_InsertSort.insertSort(data);
16     }
17     
18     public static void insertSort(int[] data){
19         int size = data.length;
20         for(int i=0;i<size;i++){
21             int temp=data[i]; //保存已排序的最后一个数值
22             int j = i;  //保存最后一个数值的下标,从后向前搜索
23             while(j>=1&&temp<data[j-1]){
24                 data[j] = data[j-1];
25                 j--;
26             }
27             data[j] = temp;
28         }
29         
30         StringBuilder build  = new StringBuilder();
31         for(int i:data){
32             build.append(i+" ");
33         }
34         System.out.println(build.toString());
35     }
36 
37 }
原文地址:https://www.cnblogs.com/JiaJoa/p/7778067.html