一、基本概念
插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。
二、java代码实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
public class InsertSort { public static void inserSort( int [] array){ if (array== null ||array.length< 2 ){ return ; } for ( int i= 1 ;i<array.length;i++){ //默认第一个元素为有序队列,从第二个元素开始循环插入 int position=array[i]; //设置第二个元素为要插入的数据 int j=i- 1 ; while (j>= 0 &&position<array[j]){ array[j+ 1 ]=array[j]; //如果插入发数小于第j个元素,将第j个数向后移 j--; } array[j+ 1 ]=position; //插入 } } public static void main(String ags[]){ int [] array={ 2 , 6 , 4 , 7 , 3 ,- 1 }; inserSort(array); for ( int i= 0 ;i<array.length;i++){ System.out.print(array[i]+ " " ); } } } |
三、性能分析
稳定
空间复杂度O(1)
时间复杂度O(n2)
最差情况:反序,需要移动n*(n-1)/2个元素
最好情况:正序,不需要移动元素
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://www.cnblogs.com/jiansen/p/7343872.html