排序算法学习(1)
来源:互联网 发布:mac virtualbox装win7 编辑:程序博客网 时间:2024/06/06 00:26
1、 在外部排序时,利用选择树方法在能在能容纳m个记录的内存缓冲区中产生的初始归并段的平均长度为2m个记录。(正确。归并排序是将两个长度相当序列合并成一个序列,初始序列长度为m,那么合并之后的平均长度为2m)
2、 已知待排序的n个元素可分为n/k个组,每个组包含k个元素,且任一组内的各元素均分别大于前一组内的所有元素和小于后一组内的所有元素,若采用基于比较的排序,其时间下界为:O(n log2 n)
分析:组间已经排好序,只需对组内元素进行排序即可。组内K个元素使用比较排序,时间下界为O(k log2 k),一共n/K组,所有O(k log2 k *n/k)=O(n log2 k);
求:求时间下限,即时间复杂度最低,效率最高的算法。
已知:1、组与组之间是有序的,不考虑,类似归并。2、每个组内是无序的,需要选择最优的排序时间复杂度O(nlog 2 n) ,
求解:对于一个组中的k个元素来说,时间复杂度为O(klog 2 k);对于n/k个组来说,时间复杂度 O(klog 2 k * n / k) = O(nlog 2 k).
3、 如果只想得到1000个元素组成的序列中第5个最小元素之前的部分排序的序列,用堆排序最快。
分析:堆排序构造堆为线性时间,取前5为 5*log 2(1000)的时间。
可以构建一共大小为k(k为前k个数)的小顶堆,线性扫描整个序列O(n),如果值小于小顶堆的堆顶元素,则不作处理;如果大于堆顶元素,用这个值替换堆顶元素,并更新小顶堆O(log k),所以复杂度为 O(n log k),接近线性。
4、 采用简单选择排序,比较次数与移动次数分别为O(N*N),O(N).
选择排序
定义:每次从未排序的记录中挑出最小(或最大)关键码字的记录,加入到已排序记录的末尾;
特点:
(1)运行时间和输入无关,有序数组、主键全部相等的数组、随机排列的数组,三者排序时间相同,排序时间与输入的状态无关;
(2)数据移动,元素交换的次数等于元素的个数,一遍排序交换一对元素;
说明:算法的时间效率取决于比较的次数,下标从0到N-1的任意元素都会进行一次交换和N-1-i次比较。
5、 利用归并排序方法对数字序列:5,19,17,21,11,8,1进行排序,共需要进行:11次比较。
- 排序算法学习(1)
- 学习排序算法1
- 使用golang学习算法(1)-排序
- 算法学习(1)——初级排序算法
- 算法导论—排序算法学习(1)
- 算法学习之排序(1)--插入排序
- 算法系统学习-1排序-冒泡排序
- 算法系统学习-1排序-选择排序
- 算法系统学习-1排序-插入排序
- 算法系统学习-1排序-归并排序
- 算法系统学习-1排序-快速排序
- 算法学习(排序一)插入排序
- 算法学习(排序二)归并排序
- 算法学习(排序三)快速排序
- 算法学习(排序五)堆排序
- 算法学习-1 快速排序
- 算法导论学习1--排序
- 排序算法(共同学习)
- What is 'JNDI'? What does 'JDNI' do?
- 本地oracle可以通过localhost连接,无法通过ip地址连接解决方法
- 做技术的思路
- js DOM对象
- alsa分析:alsa的那些配置文件 ( 2 )
- 排序算法学习(1)
- 一款漂亮的分步控件
- Android面试题-Service是否在main thread中执行, service里面是否能执行耗时的操作?
- hadoop 基本文件命令;
- 协方差和相关系数
- C# LINQ使用,运算符
- Linux基本知识(5)——用户
- 剑指Offer——(26)二叉搜索树与双向链表
- 字符串排序(华为特殊规则)