排序算法

排序算法分类

    排序算法常用主要有:冒泡排序法、快速排序法、选择排序法、插入排序法、堆排序法、归并排序法等几种。

    快速法和归并法都可通过分解区间,将排序规模有n的转化为n/2,递归转化为n/4,n/8...直到1,因此平均时间复杂度为O(n*logn)。

排序算法简析

1.冒泡排序

简介:

时间复杂度:最坏O(n^2), 平均O(n^2)。

步骤:

    1.从开始第一对到最后一对,每对相邻元素比较,第一个比第二个大则交换。最大值被排到最后。

    2.从开始第一对到倒数第2对,重复第1步操作。第二大的元素被排到倒数第2的位置。

    3.以此类推,从开始第一对到倒数第n对,重复第1步操作。第n大的元素被排序到倒数第n的位置,直至排序完成。

2.快速排序 

简介:

    选定一个元素,将要排序的记录分隔为大小两个区间,然后分别对子区间进行快速排序。

    时间复杂度为:最坏O(n^2)  平均O(n*logn)  空间复杂度O(n*logn)

步骤:

    1.选定一个元素,把整个队列过一遍,使其左边的元素都小于或等于它,其右边的元素都大于或等于它。

    2.对选定元素左右子区间分别进行快速排序(递归)。

3.选择排序

简介:

    从待排记录选择最小元素交换到待排记录的首位,完成所选元素的排序。对其余未排序元素进行选择排序。是对冒泡排序的改进。

    时间复杂度:最坏O(n^2) 平均O(n^2)。

步骤:

    第1轮,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;

    第2轮,在待排序记录r[2]~r[n]中选出最小的记录,将它与r[2]交换;

    以此类推,第i趟在待排序记录r[i]~r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕

4.插入排序

简介:

    检查第i个数字,如果在它的左边的数字比它大,进行交换。这个比较一直继续直到这个数字的左边数字比它还要小。结果是将第i个数字放到左边恰当的位置去。

    插入排序不适合对于数据量比较大的排序应用。

    但如果已经很有序,需要排序的数据量很小,例如量级小于千,那么插入排序还,接近线性复杂度O(N) ,是一个不错的方案。

    时间复杂度:最坏O(n^2)  平均O(n^2)  最好O(N) 

    直接插入排序是稳定的排序。

步骤:

    第1轮,检查第2个元素,如果左边的元素比它大,进行交换。

    第2轮,检查第3个元素,如果左边的元素不比它大,则不做任何处理,结束本轮操作。如果左边第2个元素比它大,进行交换。继续与左边第1个元素重复上述比较和交换操作。

    以此类推,检查第n个元素,将第n个元素放到左边恰当的位置。直至排序结束。

归并排序

简介:

    归并排序是利用二分法实现的排序算法,是一种比较快速的排序算法。

    时间复杂度:最坏、最佳、平均情况下均为o(nlogn),稳定。

    空间复杂度:O(n*logn)

步骤:

    第1步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列。

    第2步:设定两个指针,最初位置分别为两个已经排序序列的起始位置。

    第3步:比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置。

    重复步骤3直到某一指针超出序列尾将另一序列剩下的所有元素直接复制到合并序列尾

排序算法使用原则

    1.根据数据的不同特点使用最合适的排序方法。

    2.根据不同的排序算法优缺点,根据排序的不同阶段数据的特点,组合使用几种算法。

    快速法和插入法结合:当分区的规模达到一定小时,便停止快速排序算法。对着个“几乎”排序完成的有序数列使用插入排序算法进行排序(这时插入法有着接近线性的复杂度)。

    快速法和和堆排序法结合:开始采用快速排序算法进行排序,当递归达到一定深度时就改为堆排序来处理。


    附:排序算法代码:http://iprogram.com.cn/Article/Item/211.html

你可能感兴趣的:(排序算法)