数据结构 第八章学习小结

第八章我们了解的主要是排序,这一章还是挺难的,特别是快速排序和堆排序等等部分对于我来说还是理解欠佳,得多看看这一部分的内容。

对于这一部分的内容,我们主要对算法,内容还有时间和空间复杂度等方面去进行学习的。

在这一部分的归纳中,我在网上找到了以为博主的归纳表,我觉得很详细,就在这里借用了:

下面我们分开来讲

首先在插入排序中:

直接插入排序和折半插入排序,前者是用于顺序和链式存储,而后者是只适用于顺序,前者对于记录无序,n较大时时间开销比较大,而后者则不会。

然后是希尔排序:

void ShellPass(SeqList R,int d)
{//希尔排序中的一趟排序,d为当前增量
for(i=d+1;i<=n;i++) //将R[d+1..n]分别插入各组当前的有序区
if(R[ i ].key<R[i-d].key){
R[0]=R[i];j=i-d; //R[0]只是暂存单元,不是哨兵
do {//查找R的插入位置
R[j+d]=R[j]; //后移记录
j=j-d; //查找前一记录
}while(j>0&&R[0].key<R[j].key);
R[j+d]=R[0]; //插入R到正确的位置上
}

这里是希尔算法的另外一种代码方法,应该书中的代码对比来看。

然后对于这样一种算法,跳跃式的移动,只适用于顺序结构,记录的总次数比直接插入要少,n越大时越明显越明显。

 

冒泡排序:

可用于链式,数据多时不建议使用。

快速排序:

这里也是非顺次的移动导致不稳定,适用于无顺且n较大时的情况。

选择排序:堆排序

步骤是 调整堆,建出堆和算法实现

这里不是很熟,要多回归课本,加深理解。

 

归并排序:

注意时间复杂度是O(nlogn);还有也是适用于链式和顺序,不需要加载存储空间。

 

作业的一些错题的整理:

外排序的瓶颈在于将记录从输入缓冲区归并入输出缓冲区。

就排序算法所用的辅助空间而言     堆排序 < 快速排序 < 归并排序

另外,第八章实践一要多看书,回归课本,加深理解。

posted @ 2020-07-12 23:58  20191003037魏云龙  阅读(200)  评论(0编辑  收藏  举报