标签:lan keyword lob dcl ring cin http 部分 时间复杂度
直接插入排序(Straight Insertion Sort)的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。
– 《大话数据结构》
著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
本文作者:Coding-Naga
发表日期: 2016年3月24日
原文链接:http://blog.csdn.net/lemon_tree12138/article/details/50968422
来源:CSDN
很多其它内容:分类 >> 算法与数学
从上面的概述中我们也就能够知道了。这里对数组进行排序的过程须要两个序列才干完毕。
一个待排序的乱序序列。一个是已排序的有序序列。我们如今要要做的就是把乱序的元素一个一个地从乱序列中插入到有序序列中去。就像以下这样:
但是,这里还是有一些不太好的地方,比較明显地方就是我们须要额外加入一个辅助数组。
假设这个待排序数据比較大,那么可能加入辅助数组的策略就不能使用了。
这里我们不难想到,在原始数组中。有这种一个等式:总体序列 = 有序序列 + 乱序序列
也就是说我们能够把当前序列数组一分为二,左边为有序,右边为乱序。
这样每次从乱序序列中取出第一个元素,从有序列中插入。直到序列总体有序为止。详细的步骤请參见以下的算法步骤。
/*
* 排序算法的核心模块
*
* @param array
* 待排序数组
*/
private void sortCore(int[] array) {
int arraySize = array.length;
for (int i = 1; i < arraySize; i++) {
int j = i;
int waitInsert = array[i];
while(j > 0 && waitInsert < array[j - 1]) {
array[j] = array[j - 1];
j--;
}
array[j] = waitInsert;
}
}
排序方法 | 时间复杂度 | 空间复杂度 | 稳定性 | 复杂性 | ||
平均情况 | 最坏情况 | 最好情况 | ||||
插入排序 | O(n2) | O(n2) | O(n) | O(n) | 稳定 | 简单 |
这里的最坏的情况和平均情况从代码中就能够看出来,由于有两嵌套的for循环嘛。那么其最好的情况呢?这个就是对于一个有序的序列来说,不须要进行交换,仅仅是比較了n次,所以这里最好的时间复杂度就是O(n)。
标签:lan keyword lob dcl ring cin http 部分 时间复杂度
原文地址:http://www.cnblogs.com/clnchanpin/p/7141159.html