按关键词阅读: 报告 实验 算法 排序
即:每当两相邻的数比较后发现它们的排序与排序要求相反时 , 就将它们互换 。
冒泡排序的示例:6. 交换排序快速排序(Quick Sort)基本思想:1)选择一个基准元素,通常选择第一个元素或者最后一个元素,2)通过一趟排序讲待排序的记录分割成独立的两部分 , 其中一部分记录的元素值均比基准元素值小 。
另一部分记录 。
13、的元素值比基准值大 。
3)此时基准元素在其排好序后的正确位置4)然后分别对这两部分记录用同样的方法继续进行排序 , 直到整个序列有序 。
快速排序的示例:(a) 一趟排序的过程:(b) 排序的全过程:时效分析:快速排序是通常被认为在同数量级(O(nlog2n))的排序方法中平均性能最好的 。
但若初始序列按关键码有序或基本有序时 , 快排序反而蜕化为冒泡排序 。
为改进之 , 通常以“三者取中法”来选取基准记录 , 即将排序区间的两个端点与中点三个记录关键码居中的调整为支点记录 。
快速排序是一个不稳定的排序方法 。
7. 归并排序(Merge Sort)基本思想:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的 。
14、有序表 , 即把待排序序列分为若干个子序列 , 每个子序列是有序的 。
然后再把有序子序列合并为整体有序序列 。
归并排序示例:算法的实现:1 个元素的表总是有序的 。
所以对n 个元素的待排序列 , 每个元素可看成1 个有序子表 。
对子表两两合并生成n/2个子表 , 所得子表除最后一个子表长度可能为1 外 , 其余子表长度均为2 。
再进行两两合并 , 直到生成n 个元素按关键码有序的表 。
8. 桶排序/基数排序(Radix Sort)基本思想:是按照低位先排序 , 然后收集;再按照高位排序 , 然后再收集;依次类推 , 直到最高位 。
有时候有些属性是有优先级顺序的 , 先按低优先级排序 , 再按高优先级排序 。
最后的次序就是高优先级高的在前 , 高优先级相同的 。
15、低优先级高的在前 。
基数排序基于分别排序 , 分别收集 , 所以是稳定的 。
五、 程序设计1、 直接插入排序算法的实现2、 希尔排序算法的实现3、 简单选择排序算法的实现4、 堆排序算法的实现5、 冒泡排序算法优化后的实现6、 快速排序算法的实现7、 归并排序算法的实现8、 基数排序算法的实现六、 测试结果1、 直接插入排序算法的实现有如下结果:2、 希尔排序算法的实现有如下结果:3、 简单选择排序算法的实现4、 堆排序算法的实现5、 冒泡排序算法优化后的实现6、 快速排序算法的实现7、 归并排序算法的实现8、 基数排序算法的实现七、 总结反思本次对于八种排序的系统学习 , 利用图标的记忆能够很好的帮助学习 。
。
16、花了很长时间终于把排序的基础学了一下 , 这段时间学了很多东西 , 总结一下:学的排序算法有:插入排序 , 合并排序 , 冒泡排序 , 选择排序 , 希尔排序 , 堆排序 , 快速排序 , 基数排序 。
比较一下学习后的心得 。
我不是很清楚他们的时间复杂度 , 也真的不知道他们到底谁快谁慢 , 因为书上的推导我确实只是小小了解 , 并没有消化 。
也没有完全理解他们的精髓 , 所以又什么错误的还需要高手指点 。
1.排序稳定 , 所谓排序稳定就是指:如果两个数相同 , 对他们进行的排序结果为他们的相对顺序不变 。
例如A=1,2,1,2,1这里排序之后是A = 1,1,1,2,2 稳定就是排序后第一个1就是排序前的第一个1 , 第二个1就是排序前第二个1 , 第三个1就是排序前 。
17、的第三个1 。
同理2也是一样 。
这里用颜色标明了 。
不稳定呢就是他们的顺序不应和开始顺序一致 。
也就是可能会是A=1,1,1,2,2这样的结果 。
2.感觉谁最好 , 在我的印象中快速排序是最好的 , 时间复杂度:n*log(n) , 不稳定排序 。
原地排序 。
他的名字很棒 , 快速嘛 。
当然快了 。
我觉得他的思想很不错 , 分治 , 而且还是原地排序 , 省去和很多的空间浪费 。
速度也是很快的 , n*log(n) 。
但是有一个软肋就是如果已经是排好的情况下时间复杂度就是n*n,不过在加入随机的情况下这种情况也得以好转 , 而且他可以做任意的比较 , 只要你能给出两个元素的大小关系就可以了 。
适用范围广 , 速度快 。
3.插入排序:n*n的时间复杂度 , 稳定排序 ,。
18、原地排序 。
来源:(未知)
【学习资料】网址:/a/2021/0126/0021177202.html
标题:排序|排序算法实验报告( 三 )