《我的第一本算法书》第2章笔记

2.1什么是排序

本节将对各种各样的排序算法进行介绍,且输入的数字个数都设定为n。

2.2冒泡排序

其就是从序列右边开始比较两个数字的大小,再根据结果交换两个数字的位置。数字就会像是泡泡一样,慢慢从右向左浮到序列的顶端,所以这个算法才被称作冒泡序列。6

在冒泡排序种,总的排序顺序为n的2次方/2。此结果恒定,与输入数据的排列顺序无关。冒泡排序的时间复杂度为O(n^2)。

2.3选择排序

每次都从待排序的数据中寻找最小值,使用线性查找,将其与序列最左面的数字进行交换。

同样需要比较大约n^2 /2次。时间复杂度同样恒为O(n^2)。

2.4插入排序

插入排序从左边开始,一般左边视作已排序区域,右边视作未排序区域。其思路是从右边的未排序区域内取出一个数据,然后把插入到已排序区域内合适的位置上。

时间复杂度仍为O(n^2)。

2.5堆排序

将n个数据存进堆里,其所需时间为O(nlog n)。每插入一个数据所花时间为O(log n)。时间复杂度为O(nlog n)。其比第二章前面的数据结构时间所花时间都要短,相对比较简单。

2.6归并排序

归并排序算法会将序列分成长度相同的两个子序列,当无法在分的时候,对子序列进行归并。归并就是把两个排好序的子序列合并成一个有序序列。一直往下操作,直到所有子序列合并为一个整体为止。

每一行的比较时间为O(n)。有以2为底n的对数行,因此总的运行时间为O(nlog n)。

2.7快速排序

快速排序时要在序列中选择一个基准值,将除了基准值外的数分为“比基准值小的数”和“比基准值大的数”这两个类别,再从两个类别中寻找基准值。然后一层层向下寻找基准值。

快速排序实则是一种分治法,将原本复杂的问题变成了俩个子问题,再分别解决,知道子问题中只剩下一个数字为止。

如果每次选择的基准值都能将序列分为原本的一半,那么运行时间为O(nlog n)。若运气不好,每次都选择最小值作为基准值,则运行时间为O(n^2)。

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>