这个快速排序的算法作业竟然做了我一天。。
详细的代码和标注在GitHub里
第一道题: 每次用数组的第一个数作为pivot number.
提醒: 一定要按照课程中所说的方式写你的代码,不然算出来的数字会不一样。
这也是写了我一上午的题,不过后面只要重复利用这串代码,工作量就不大了。
第二道题: 每次用数组的最后一个数作为pivot number
将每次迭代数组中最后一个数与头部数据交换,然后用第一题的代码就行。
第三道题: 每次用选取数组的第一个数,最后一个数和中间数,取这三个数的中值作为pivot number
写了我一下午。三个数取中位数,中间值位置的计算,以及调试用了好久。
如果想直接看答案,请去这里。
总结
1.递归的时候要想清楚base case情况,该输出什么。这一点不容易,应为base case往往是拆分到最后才能看出来的。通常的情况有两个,拆分到最后数组中剩下一个数据,和剩下两个数据。要判断哪种情况是我们的base case。输出的什么要根据任务要求,是输出数字(任务要求数数) 还是输出数组(任务要求排序)
2. 许多小的函数,容易写错,最好先写好,调试好小的函数,确保万无一失了,才将其嵌入大的函数中。不然一个大的函数中往往装有若干个小的函数,一出bug,来个递归,很难查清楚是哪个函数出问题。所以要抢先写好完美的小函数。我就被错误的取中位数函数,中间值的计算困扰了好久。
3. 学会写函数的文档说明,现在大体分为4 个部分
函数说明:这个函数是做什么的
原理说明:这个函数用了什么方法,原理
参数说明:各个参数都代表什么,数据类型是什么
输出说明: 输出什么,数据类型是什么
用法说明: 给出实际的应用案例。