排序

排序的分类:

冒泡排序,快速排序

参考:http://www.cnblogs.com/feixuelove1009/p/6143539.htmlarrow-up-right

知识部分

一、排序介绍

1、内排序和外排序

内排序:排序时,待排序的所有记录都在内存中

外排序:排序时,使用到了外部存储

2、排序按操作划分

插入排序 复杂度:O(n^2)

交换排序 复杂度:O(n^2)

选择排序 复杂度:O(n^2)

归并排序

交换排序和选择排序的复杂度相同,是因为它们的比较次数一样多,但是选择排序比交换排序中的冒泡排序时间短,是因为它的交换次数少得多,而CPU处理交换的速度比处理比较的速度慢。

3、以算法复杂度分为

简单算法:冒泡排序简单选择排序直接插入排序

改进算法:希尔排序堆排序归并排序快速排序

重点是这七种经典排序算法

4、排序的稳定性

如果原序列之中有两个相同的元素,例如A[i] = A[j],它们在排序前的序号分别是i和j,且i<j,如果排序完成之后,i<j依旧成立,那么说明排序是稳定。

二、冒泡排序

示例:

虽然可以用python写出冒泡排序的算法,但感觉没有什么意义。因为只要你能制定出比较两者“大小”的方式,就可以使用sort(list,key=func)来实现。说起来,我倒是对python中原有的排序机理产生了兴趣。因为它涉及到了合并排序和插入排序,那就先看一下这两种排序。

三、直接插入排序

原文的代码太奇怪了,我自己写一个吧

四、归并排序

感觉这个名字起得不好啊,是不是分并排序更好些?原文代码一大段,看得又头疼又无聊,所以下面还是我自己写的

简单来说就是,使用迭代的方式先拆后合并。但是关于拆分的最小单位如何确定效率才比较高,这点我还不清楚。

三、Timsort

Timsort是结合了合并排序(merge sort)和插入排序(insertion sort)而得出的排序算法,它在现实中有很好的效率。Tim Peters在2002年设计了该算法并在Python中使用(TimSort 是 Python 中 list.sort 的默认实现)。该算法找到数据中已经排好序的块-分区,每一个分区叫一个run,然后按规则合并这些run。Pyhton自从2.3版以来一直采用Timsort算法排序,现在Java SE7和Android也采用Timsort算法对数组排序。

习题部分

一、数组(列表)排序

1、对于数字排序,用list.sort()方法或者sorted方法都可以,如果非要实现的话,基本与字母排序一样

2、字母排序

网上看到的一种解答是

点评:我觉得毫无意义,数字排序不用说了,内置方法几乎可以帮你完成所有的排序方式包括自定义,而这种字母排序,我实在不能理解其中的意义。假设只有两个符号,一种排前面,一种排后面,完全可以使用以下方法

结果丝毫不差,没错这不是排序,但这解决了排序问题。

Last updated