摘要:
第29课 - 排序课后练习 1. 根据动画课件独立实现对应的排序算法。 2. 希尔排序分组后,使用插入排序分别对不同的组进行排序。 考虑:是否可以用冒泡排序对不同的组进行排序,且当分组参数收敛到1时,整个排序也能成功排序。 如果可以,请实现这个排序算法。 如果不行,请说明原因。 阅读全文
摘要:
第28课 - 进阶星移 1. 希尔排列 将待排序列划分为若干个组,在每一个组内进行插入排序,一整个序列基本有序,后再对整个序列进行插入排列。 例如:将n个数据元素分成d个子序。 { R[1],R[1+d],R[1+2d],…,R[1+kd] }。 { R[2],R[2+d],R[2+2d],…,R[ 阅读全文
摘要:
第27课 - 初始斗转 1. 选择排序 每一次选出前面的元素最小的元素作为第i个元素。 程序: #include <stdio.h> void println(int array[], int len) { int i = 0; for(i=0; i<len; i++) { printf("%d " 阅读全文
摘要:
第26课 - 排序的概念及分类 疑问:既然已经存在的排序算法基本上都有现成的实现了。我们需要的时候直接调用就可以了,为什么还要学习呢?你不是说要代码复用吗? 1. 排序的一般定义 排序是计算机内经常进行的一种操作,其目的是将一组“无序”的数据元素调整为“有序”的数据元素。 例如: 将下列关键字序列: 阅读全文
摘要:
第25课 - 队列课后练习 为本专题中实现的队列添加MaxAddress()操作。 该操作返回队列中存储的最大地址值。 分析对比哪种队列实现方式的MaxAddress() 效率效率最好?是否有更高效的方法? 两个栈可以实现队列,那么反过来,两个队列是否可以实现栈呢? 如果不可以,请说明原因。 如果可 阅读全文
摘要:
第23课 - 队列的优化实现 1. 顺序队列的瓶颈 顺序队列 线性表的第一个元素作为队头。 线性表的最后一个元素作为队尾。 入队的新元素是线性表的最后,时间复杂度为O(1)。 出队列时需要将后续的所有元素向前移动,时间复杂度是O(n)。 2. 顺序队列的优化方案 (1)定义front使其始终代表队头 阅读全文
摘要:
第24课 - 队列的特别实现 讨论: A: 重新实现的方式确实提高了顺序队列和链式队列的效率,可是实现过程还是比较复杂的。 B: 这也是没有办法的事,直接复用链表虽然可以实现队列,但是效率不好。 C: 有没有既能复用之前的代码,又能高效实现队列。 1. 思路 准备两个栈用于实现队列:inStack和 阅读全文