排序

记录一下几种排序:

 One:桶排序

桶排序:例如需要排序数的范围是0~n,那你则需要申请n+1一个变量,也就是说要写成int a[n+1]。应为我们需要用n+1个“桶”来存储0~n每一个数出现的次数。

即便只给你5个数进行排序(例如这五个数是1、2100000、12358、6546和8787),你任然需要2100000个“桶”,这就浪费空间!还有,如果现在需要排序

的不再是整数而是一些小数,比如将5.1、1.323、4.54、5.43、1.23这五个数进行从小到大排序又该怎么办呢?当然桶排序针对连续数其值范围较小,还是

很简单、快捷的。算法复杂度O(2*(m+n)),当然了O用来表示时间复杂度,可忽略较小常数O(M+N)。

Two:冒泡排序

冒泡排序的基本思想是:每次比较两个相邻的元素,如果它们顺序错误就把他们交换过来。冒泡排序的核心部分是双重嵌套循环。复杂度是O(N^2)。

Three:快速排序

快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序n个元素要O(nlogn)次比较。在最坏状况下则需要O(n^2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他O(nlogn)算法更快,因为它的内部循环可以在大部分的架构上很有效率地被实现出来。

快速排序使用分治策略(Divide and Conquer)来把一个序列分为两个子序列。步骤为:

  1. 从序列中挑出一个元素,作为"基准"(pivot).
  2. 把所有比基准值小的元素放在基准前面,所有比基准值大的元素放在基准的后面(相同的数可以到任一边),这个称为分区(partition)操作。
  3. 对每个分区递归地进行步骤1~2,递归的结束条件是序列的大小是0或1,这时整体已经被排好序了。
原文地址:https://www.cnblogs.com/coniglio/p/10044973.html