排序技术

一、插入排序

  直接插入排序:依次将待排序序列中的每一个记录插入到已排好序的序列中,直到全部记录都排好序;(折半插入排序)O(n^2)

  希尔排序:先将整个待排序记录序列分割成若干个子序列,在子序列内分别进行直接插入排序,待整个序列基本有序时,再对全体记录进行一次直接插入排序;O(nlog2n)-O(n^2)

二、交换排序

  起泡排序:两两比较相邻记录,如果反序则交换,直到没有反序记录为止;O(n^2)

  快速排序:首先选一个轴值,将待排序列划分成两部分,左侧记录均小于或等于轴值,右侧记录均大于或等于轴值,然后分别对这两部分重复上述过程,直到整个序列有序;O(nlog2n)

在快速排序中,记录的比较和移动从两端向中间进行,值较小的记录一次就能从后面移动到前面,记录移动的距离较远,从而减少了总的比较次数和移动次数;

三、选择排序

  简单选择排序:第i趟排序在待排序序列ri---rn中选取最小记录,并和第i个记录交换作为有序序列的第i个记录;O(n^2)

  堆排序:首先将待排序序列构造成一个堆,此时,选出了堆中所有记录的最大者即堆顶记录,然后将堆顶记录移走,并将剩余的记录再调整成堆,这样就找出了次大的记录,依次类推,直到堆中只有一个记录。O(nlog2n)    简单选择排序在一趟排序中仅选出最小记录,没有把一趟的比较结果保存下来,因而记录的比较次数较多。堆排序在选出最小记录的同时,也找出较小记录,减少了选择的比较次数,从而提高整个排序的效率。

四、归并排序

二路归并排序:将待排序序列划分为两个长度相等的子序列,分别对两子序列进行排序,得到两个有序子序列,再将这两个有序子序列合并成一个有序序列;O(nlog2n)---递归,非递归;

五、基数排序

借助对多关键码进行分配和收集的思想对单关键码进行排序;将待排序记录看成由若干个子关键码复合而成,然后采用分配和收集的方法采用LSD(最次位优先)方法进行排序; 

原文地址:https://www.cnblogs.com/Cloud-king/p/8877590.html