首页 > 其他 > 详细

排序--插入排序

时间:2014-03-13 06:57:43      阅读:363      评论:0      收藏:0      [点我收藏+]

http://zh.wikipedia.org/wiki/%E6%8F%92%E5%85%A5%E6%8E%92%E5%BA%8F

插入排序:Insertion Sort:稳定

算法描述:

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

1,从第一个元素开始,该元素默认被排序;

2,取出下一个元素(新元素key),然后在已经排序的元素序列中从后向前扫描;

3,如果已排序的序列中的元素大于新元素,将该元素移向下一位置;

4,重复步骤3,直到找到小于新元素的该元素(data[position-1]);

5,将新元素插入到该元素后面

6,重复2~5。

Java代码实现

bubuko.com,布布扣
 1 public class Insertion
 2 {
 3     public static void insertionSort(Comparable data[]){
 4         for(int index = 1; index < data.length; index++)
 5         {
 6             //要被排序的新元素key
 7             Comparable key = data[index];
 8             //新元素初始位置
 9             int position = index;
10             while(position > 0 && data[position-1].compareTo(key)>0){
11                 //将旧元素后移一位
12                 data[position] = data[position-1];
13                 //继续往前寻找符合条件(小于新元素key)的旧元素,直到序列的起点0
14                 position--;
15             }
16             //将新元素key放在符合条件的元素的后面,即position处。
17             data[position] = key;
18         }
19     }
20     public static void main(String[] args)
21     {
22         Comparable []c = {12,33,2,55,34,877,6,77};
23         insertionSort(c);
24         System.out.print("插入排序后:");
25         for(Comparable comparable: c)
26         {
27             System.out.print(comparable+" ");
28         }
29     }
30 
31 }
bubuko.com,布布扣

 bubuko.com,布布扣

时间复杂度:

如果目标是把n个元素的序列升序排列,那么采用插入排序存在最好情况和最坏情况。最好情况就是,序列已经是升序排列了,在这种情况下,需要进行的比较操作需(n-1)次即可。最坏情况就是,序列是降序排列,那么此时需要进行的比较共有n(n-1)/2次。插入排序的赋值操作是比较操作的次数减去(n-1)次。平均来说插入排序算法复杂度为O(n2)。因而,插入排序不适合对于数据量比较大的排序应用。但是,如果需要排序的数据量很小,例如,量级小于千,那么插入排序还是一个不错的选择。 插入排序在工业级库中也有着广泛的应用,在STL的sort算法和stdlib的qsort算法中,都将插入排序作为快速排序的补充,用于少量元素的排序(通常为8个或以下)。

排序--插入排序,布布扣,bubuko.com

排序--插入排序

原文:http://www.cnblogs.com/wangziqiang/p/3596493.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!