标签:
桶排序:思路是,申请足够数量的空间去存放可能出现的值,循环所有的值,把对应值得地方进行标记,然后依据值得大小输出排序的顺序。
例子:2 5 8 6 1 4
申请数组a[8]
出现一个数,a[那个数] = 1;
最后循环数组,值为1的输出即可。
冒泡排序:思路是,不停的比较前后两个数,如果顺序不对就交换,每次都在大的数放在后面,每一次循环就能把最大的数冒出来。
例子:2 5 8 6 1 4
比较 2 5,正常,不动
比较 5 8,正常,不动
比较 8 6,不对,交换
比较 8 1,不对,交换
比较 8 4,不对,交换
最后8就冒出来了,多次循环之后就能排序完成,值得注意的是,每次循环可以少循环一个数,因为那个数已经冒泡出来了,比如下一次就不用和8比较了。
快速排序:思路是,找一个标志数放置在首位,然后根据这个标志数从首末两头寻找,找到一个大于标志数,一个小于标志数的两个数,然后交换两个数,最后当碰头时,碰头数和标志数交换位置,然后此时在比较标志数的左边序列利用上面的方法再来一次,右边也一样
例子:2 5 8 6 1 4
2为标志数
从后头4开始,我们向前找,找到了1比2小
从前头2开始,我们向后找,找到了5比2大
交换5和1
原序列变成 2 1 8 6 5 4
从后头5开始,我们向前找,找到了1比2小(碰头了)
交换 1 和 2
原序列变成 1 2 8 6 5 4
然后是2左边的序列已经齐了
2右边的序列利用之前的方法进行排序即可
总结:桶排序时间复杂度O(N+M),冒泡排序O(N^2),快速排序O(N logN),实际之中我经常就是一个sort()就代替所有的方法,没有理解其中的排序算法,所以有时候方便就会造成不懂的漏洞。
标签:
原文地址:http://www.cnblogs.com/linkstar/p/5233206.html