斯坦福算法1第二周编程作业:快速排序(Quicksort)比较次数的python实现

这个快速排序的算法作业竟然做了我一天。。

详细的代码和标注在GitHub里

第一道题: 每次用数组的第一个数作为pivot number. 

提醒: 一定要按照课程中所说的方式写你的代码,不然算出来的数字会不一样。

这也是写了我一上午的题,不过后面只要重复利用这串代码,工作量就不大了。



第二道题: 每次用数组的最后一个数作为pivot number

将每次迭代数组中最后一个数与头部数据交换,然后用第一题的代码就行。



第三道题: 每次用选取数组的第一个数,最后一个数和中间数,取这三个数的中值作为pivot number

写了我一下午。三个数取中位数,中间值位置的计算,以及调试用了好久。


如果想直接看答案,请去这里。



总结

1.递归的时候要想清楚base case情况,该输出什么。这一点不容易,应为base case往往是拆分到最后才能看出来的。通常的情况有两个,拆分到最后数组中剩下一个数据,和剩下两个数据。要判断哪种情况是我们的base case。输出的什么要根据任务要求,是输出数字(任务要求数数) 还是输出数组(任务要求排序)

2. 许多小的函数,容易写错,最好先写好,调试好小的函数,确保万无一失了,才将其嵌入大的函数中。不然一个大的函数中往往装有若干个小的函数,一出bug,来个递归,很难查清楚是哪个函数出问题。所以要抢先写好完美的小函数。我就被错误的取中位数函数,中间值的计算困扰了好久。

3. 学会写函数的文档说明,现在大体分为4 个部分 

函数说明:这个函数是做什么的

原理说明:这个函数用了什么方法,原理

参数说明:各个参数都代表什么,数据类型是什么

输出说明: 输出什么,数据类型是什么

用法说明: 给出实际的应用案例。


你可能感兴趣的:(斯坦福算法1第二周编程作业:快速排序(Quicksort)比较次数的python实现)