游戏辅助制作教程:按键精灵解密两种排序算法
一、冒泡排序
冒泡排序是最慢的排序算法,但也是新手最容易上手的一个排序方法。
在实际运用中它是效率最低的算法。
它通过一趟又一趟地比较数组中的每一个元素,使较大的数据下沉,较小的数据上升。
它是O(n^2)的算法。
O(n^2)的算法其实是衡量算法速度快慢的一个指标,我们称之为算法的时间复杂度。
时间复杂越大,算法的执行效率越低。
当然,并不是越快的算法,一定越好。
算法还有另一个指标,叫空间复杂度,即算法占用多少空间,这个和内存息息相关。
一个算法可能很快,但是它占用的内存多,不一定耗得起。
所以呢在不同的场合,我们需要根据不同的要求,会选择最合适的算法。
但是在游戏扫拍卖或者其他需要比拼速度的时候,时间就是金钱~越快越能抢占先机。
现在我们介绍另一种更快更有效率的排序——快速排序,时间复杂度为O(n*logn)。
二、快速排序的算法思想
快速排序采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。
该方法的基本思想是:
1.先从数列中取出一个数作为基准数。
(不要被这个名词吓到了,就是一个用来参照的数,待会你就知道它用来做啥的了)。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3 . 再对左右区间重复第二步,直到各区间只有一个数。
通俗一点解释就是:假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。
就让第一个数6作为基准数吧。
接下来,需要将这个序列中所有比基准数大的数放在6的右边,比基准数小的数放在6的左边。
方法其实很简单:分别从初始序列“6 1 2 7 9 3 4 5 10 8”两端开始“探测”。
先从右往左找一个小于6的数,再从左往右找一个大于6的数,然后交换他们。
这里可以用两个变量i和j,分别指向序列最左边和最右边。
我们为这两个变量起个好听的名字“哨兵i”和“哨兵j”。
刚开始的时候让哨兵i指向序列的最左边(即i=1),指向数字6。
让哨兵j指向序列的最右边(即=10),指向数字。