排序
这里我分析的是内部排序,外部排序没有进行分析,总结如下
接下来我将对我的总结进行定向的分析
一共分析的是八个排序
分别是:1.插入排序—直接插入排序
2. 插入排序—希尔排序
3. 选择排序—简单选择排序
4. 选择排序—堆排序
5. 交换排序—冒泡排序
6. 交换排序—快速排序
7. 归并排序
8. 桶排序/基数排序
1.插入排序—直接插入排序
基本思想:将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表。即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止。
要点:设立哨兵,作为临时存储和判断数组边界之用。 实例如下
如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序,所以插入排序是稳定的。
算法的实现如下
时间复杂度是:O(n^2)
分析: 1>时间复杂度分析 最坏情况:序列是逆序的,总的执行次数是n(n-1)/2;因此时间复杂度是O(n^2);;
2>空间复杂度分析 根据代码,很容易就可以看出,空间复杂度是O(1)
理解:直接插入排序,一趟是无法排序好的,而且值得注意的是
我们可以看出,对于直接插入排序,在最后一趟排序前,这个序列没有任何一个数据达到最终的位置,我觉得这应该是插入类排序的共同特点
2.插入排序—希尔排序
这个排序的代码我不会写,但是我会手算排序到某一个阶段序列是什么样的
基本思想:将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。
如图可以看到 在这里插入图片描述
原理还是相当的好理解的,就是分块排序,然后再把每一块排序好,主要就是递归思想和分块的方法,能准确的分块就没问题了这个是我在网上找到的代码,不是参考资料打出来的,截图到这里看一下
具体的代码分析我就不写了 分析: 1>时间复杂度分析 希尔排序的平均情况是O(nlog2n) 2&