码迷,mamicode.com
首页 > 编程语言 > 详细

排序算法之插入排序

时间:2019-10-13 13:00:02      阅读:67      评论:0      收藏:0      [点我收藏+]

标签:插入排序   实现   sys   过程   soft   img   span   列表   src   

 

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

基本思想:

  把N个待排序元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序表中有N-1个元素;每次从无序表中取出一个元素,将它插入到有序表中,使之成为新的有序表,重复N-1次完成整个排序过程。

算法分析:

  1)从序列第一个元素开始,该元素可以认为已经被排序;

  2)去下一个元素设为待插入元素,在已排序的序列中从后向前扫描,如果该元素大于带插入元素,将该元素移到下一个位置;

  3)重复步骤2),直到找到已排序的元素小于或等于待排序元素的位置,插入元素;

  4)重复2),3)步骤,完成排序。

时间复杂度:

  1)顺序排列时,只需比较(N-1)次,插入排序的时间复杂度为O(n);

  2)逆序排序时,只需比较N(N-1)/2 次,插入排序时间复杂度为O(n2);

  3)当原始序列是无序时,平均时间复杂度为O(n2);

空间复杂度:

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

排序过程图:

技术图片

接下来看一下具体的Java代码实现:

第一种形式:

 1 public void sort(int arr[]) {
 2     for(int i =1; i<arr.length;i++) {
 3         int insertVal = arr[i];    //插入的数
 4         int index = i-1;    //被插入的位置(准备和前一个数比较)
 5         while(index>=0&&insertVal<arr[index]) {    //如果插入的数比被插入的数小
 6             arr[index+1]=arr[index];    //将把 arr[index] 向后移动
 7             index--;    //让 index 向前移动
 8         }
 9         arr[index+1]=insertVal;    //把插入的数放入合适位置
10     } 
11 }

 

 第二种形式:

 1 public class InsertSort {
 2     public static void main(String[] args) {
 3         int a[] = {3,1,5,7,2,4,9,6};
 4         new InsertSort().insertSort(a);
 5     }
 6 //直接插入排序算法的实现
 7     private void insertSort(int[] a) {
 8         for( int i=1;i<a.length;i++){
 9             int temp = a[i];       //temp为本次循环待插入有序列表中的数
10             for(int j=i-1;j>=0 && a[j]>temp;j--){      //寻找temp插入有序列表的正确位置
11                 a[j+1] = a[j];      //元素后移,为插入temp做准备
12             }
13             a[j+1] = temp;       //插入temp
14             print(a,a.length,i);
15         }
16         printResult(a,a.length);
17     }
18    //打印排序的最终结果
19     private void printResult(int[] a){
20         System.out.print("最终排序结果:");
21         for(int j=0;j<a.length;j++){
22             System.out.print(" "+a[j]);
23         }
24         System.out.println();
25     }
26   // 打印排序的每次循环结果
27     private void print(int[] a, int i) {
28         System.out.print("第"+i+"次:");
29         for(int j=0;j<a.length;j++){
30             System.out.print(" "+a[j]);
31         }
32         System.out.println();
33     }
34 }

 

排序算法之插入排序

标签:插入排序   实现   sys   过程   soft   img   span   列表   src   

原文地址:https://www.cnblogs.com/HuiH/p/11665479.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!