收藏 分享(赏)

数据结构排序算法总结I.doc

上传人:yjrm16270 文档编号:6869076 上传时间:2019-04-25 格式:DOC 页数:7 大小:66KB
下载 相关 举报
数据结构排序算法总结I.doc_第1页
第1页 / 共7页
数据结构排序算法总结I.doc_第2页
第2页 / 共7页
数据结构排序算法总结I.doc_第3页
第3页 / 共7页
数据结构排序算法总结I.doc_第4页
第4页 / 共7页
数据结构排序算法总结I.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

1、数据结构排序算法总结 I考研复习到数据结构排序这章了,这章的内容比较经典,都是一些很好的算法,将来很可能会用得到,总结一下,加深一下印象。文章篇幅有点大,请点击查看更多,下面是跳转链接:一、 插入排序 1)直接插入排序 2)折半插入排序 3)希尔排序二、 交换排序 1)冒泡排序 2)快速排序 三、 选择排序 1)简单选择排序 2)堆排序 四、 归并排序 五、 基数排序 一、插入排序1)直接插入排序 算法演示时间复杂度: 平均情况O(n 2) 最坏情况O(n 2) 辅助空间:O(1) 稳定性:稳定复制到剪贴板折叠 C 代码1. void InsertSort(SqList 4. for (i=2

2、; i=high+1; -j) L.rj+1 = L.rj; / 记录后移 13. L.rhigh+1 = L.r0; / 插入 14. 15. / BInsertSort 3)希尔排序 算法演示时间复杂度: 理想情况O(nlog 2n) 最坏情况O(n 2) 稳定性:不稳定复制到剪贴板折叠 C 代码1. void ShellInsert(SqList j-=dk) 10. L.rj+dk = L.rj; / 记录后移,查找插入位置 11. L.rj+dk = L.r0; / 插入 12. 13. / ShellInsert 14. 15. 16. void ShellSort(SqList

3、k=i;j-) /对当前无序区 Rin自下向上扫描 7. if(Rj+1.key=pivotkey) -high; 9. temp=L.rlow; 10. L.rlow=L.rhigh; 11. L.rhigh=temp; / 将比枢轴记录小的记录交换到低端 12. while (low=pivotkey) -high; 28. L.rlow = L.rhigh; / 将比枢轴记录小的记录移到低端 29. while (low= H.rj.key) break; / rc 应插入在位置 s 上 11. H.rs = H.rj; s = j; 12. 13. H.rs = rc; / 插入 14

4、. / HeapAdjust 15. 16. void HeapSort(HeapType 19. RedType temp; 20. for (i=H.length/2; i0; -i) / 把 H.r1H.length建成大顶堆 21. HeapAdjust ( H, i, H.length ); 22. for (i=H.length; i1; -i) 23. temp=H.ri; 24. H.ri=H.r1; 25. H.r1=temp; / 将堆顶记录和当前未经排序子序列 Hr1i中 26. / 最后一个记录相互交换 27. HeapAdjust(H, 1, i-1); / 将 H.

5、r1i-1 重新调整为大顶堆 28. 29. / HeapSort 四、归并排序1)归并排序 算法演示时间复杂度: 平均情况O(nlog 2n) 最坏情况O(nlog 2n) 辅助空间:O(n) 稳定性:稳定复制到剪贴板折叠 C 代码1. void Merge (RedType SR, RedType TR, int i, int m, int n) 2. / 将有序的 SRim和 SRm+1n归并为有序的 TRin 3. int j,k; 4. for (j=m+1, k=i; i=m +k) 5. / 将 SR 中记录由小到大地并入 TR 6. if LQ(SRi.key,SRj.key)

6、 TRk = SRi+; 7. else TRk = SRj+; 8. 9. if (i=m) / TRkn = SRim; 将剩余的 SRim复制到 TR 10. while (k=n 11. if (j=n) / 将剩余的 SRjn复制到 TR 12. while (k=n 13. / Merge 14. 15. void MSort(RedType SR, RedType TR1, int s, int t) 16. / 将 SRst归并排序为 TR1st。 17. int m; 18. RedType TR220; 19. if (s=t) TR1t = SRs; 20. else 2

7、1. m=(s+t)/2; / 将 SRst平分为 SRsm和 SRm+1t 22. MSort(SR,TR2,s,m); / 递归地将 SRsm归并为有序的 TR2sm 23. MSort(SR,TR2,m+1,t); / 将 SRm+1t归并为有序的 TR2m+1t 24. Merge(TR2,TR1,s,m,t); / 将 TR2sm和 TR2m+1t归并到 TR1st 25. 26. / MSort 27. 28. void MergeSort(SqList 31. / MergeSort 五、基数排序 1)基数排序 算法演示时间复杂度:平均情况O(d(n+rd) 最坏情况O(d(n+

8、rd) 辅助空间:O(rd) 稳定性:稳定复制到剪贴板折叠 C 代码1. void Distribute(SLList 7. for (j=0; jRADIX; +j) fj = 0; / 各子表初始化为空表 8. for (p=L.r0.next; p; p=L.rp.next) 9. j = L.rp.keysi-0; / 将记录中第 i 个关键字映射到0RADIX-1, 10. if (!fj) fj = p; 11. else L.rej.next = p; 12. ej = p; / 将 p 所指的结点插入第 j 个子表中 13. 14. / Distribute 15. 16. v

9、oid Collect(SLList 20. for (j=0; !fj; j+); / 找第一个非空子表,succ 为求后继函数: + 21. L.r0.next = fj; / L.r0.next 指向第一个非空子表中第一个结点 22. t = ej; 23. while (jRADIX) 24. for (j=j+1; jRADIX j+); / 找下一个非空子表 25. if (jRADIX) / 链接两个非空子表 26. L.rt.next = fj; t = ej; 27. 28. L.rt.next = 0; / t 指向最后一个非空子表中的最后一个结点 29. / Collec

10、t 30. 31. void RadixSort(SLList 36. ArrType f, e; 37. for (i=1; iL.recnum; +i) L.ri-1.next = i; 38. L.rL.recnum.next = 0; / 将 L 改造为静态链表 39. for (i=0; iL.keynum; +i) 40. / 按最低位优先依次对各关键字进行分配和收集 41. Distribute(L, i, f, e); / 第 i 趟分配 42. Collect(L, i, f, e); / 第 i 趟收集 43. print_SLList2(L, i); 44. 45. / RadixSort

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报