所谓排序,无非就是把一个无序的序列排成一个有序的序列,从本文开始,将着重介绍经典的一些排序算法。
插入排序,是指将待排序列中的数,一个一个插入到适当位置的过程。说起算法的概念来,总是让人摸不着头脑,还是从生活中的例子来理解吧。相信每个人都玩过牌,我们在开始摸牌的时候,左手是空的,牌面朝下放到桌子上,接着,一次从桌子上摸起一张牌,并将它插入到左手一把牌中的正确位置上,为了找到这张牌的正确位置,要将它与手中已有的每一张牌从右到左地进行比较,无论什么时候,左手中的牌都是排好序的,而这些牌原先都是桌子上那副牌里最顶上的一些牌。
于是,根据以上的算法分析,可以写出以下的Java代码。
1 /** 2 * 插入排序算法 3 * 4 * @param A 5 * int数组 6 * @param isInc 7 * 是否升序,true为升序,false为降序 8 */ 9 private void InsertSort(int[] A, boolean isInc) { 10 int len = A.length; 11 int key = 0; 12 int i = 0; 13 for (int j = 1; j < len; j++) { 14 key = A[j]; 15 i = j - 1; 16 while (i >= 0 && (isInc ? A[i] > key : A[i] < key)) { 17 A[i + 1] = A[i]; 18 i = i - 1; 19 } 20 A[i + 1] = key; 21 } 22 }
从算法的机理可以看出,该算法是原地排序的,而且其算法复杂度为O(n2)。
标签: 算法
评论:3
|
|||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
---|---|---|---|---|---|---|---|---|---|
25 | 26 | 27 | 28 | 29 | 30 | 31 | |||
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 | 27 | 28 | |||
29 | 30 | 1 | 2 | 3 | 4 | 5 |
搜索
随笔档案
最新评论
- 1. Re:有意思的排序算法-插入排序
- @机器视觉爱好者
我觉得这个跟冒泡排序是不同的吧,冒泡排序是每次都会产生一个最大值,而插入算法是将一个新来的值插入到合适的位置。 - 2. Re:有意思的排序算法-插入排序
- 冒泡法排序。。。。。。。。。。。。。。=_=!!!!!
- 3. Re:有意思的排序算法-插入排序
- insertsort lst = helper lst [] where helper [] l = l helper (x:xs) l = helper xs (smaller ++ [x]++larger) where smaller = [a|a <- l,a<=x] larger = [b|b <- l,b>x] Haskell版的
- 4. Re:简化的打印语句-静态导入
- @superhzh
O(∩_∩)O哈哈~ - 5. Re:简化的打印语句-静态导入
- 学习了,想不到还有这样的用法