排序算法对比,步骤,改进

Posted ydymz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法对比,步骤,改进相关的知识,希望对你有一定的参考价值。

图片镇楼

技术分享图片

插入排序(InsertSort)

步骤:

      1.依次选择一个待排序的记录,

      2.依次与已经排好序的有序序列比较,并插入

      3.持续每次对越来越少的元素重复上面的步骤,直到插完所有元素为。

 

改进:

  二分插入排序,直接和有序序列的中间比较。

  希尔排序

 

希尔排序(又叫缩小增量排序,ShellSort)

步骤

       1.先将整个待排元素序列分割成若干个子序列

       2.分别进行插入排序

   3.然后依次缩减增量再进行插入排序

       4.待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次插入排序

 

冒泡排序(BubbleSort)

步骤:

      1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。

      2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

      3.针对所有的元素重复以上的步骤,除了最后一个。

      4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

改进:

  快速排序

 

快速排序(QuickSort)

步骤:

       1.从数列中挑出一个元素,称为 "基准",重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。

       2.递归地把小于基准值元素的子数列和大于基准值元素的子数列排序。

       3.递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。

 

选择排序(SelectSort)

步骤:

      1.在未排序序列中找到最小(大)元素,存放到排序序列的起始位置

      2.从剩余未排序元素中继续寻找最小(大)元素

      3.放到已排序序列的末尾

      4.以此类推,直到所有元素均排序完毕。

改进:

       传统的简单选择排序,每趟循环只能确定一个元素排序后的定位。我们可以考虑改进为每趟循环确定两个元素(当前趟最大和最小记录)的位置,从而减少排序所需的循环次数。改进后对n个数据进行排序,最多只需进行[n/2]趟循环即可。

  堆排序。

 

堆排序(HeapSort)

步骤:

      1.将无需序列构建成一个堆,根据升序降序需求选择大顶堆或小顶堆;

      2.将堆顶元素与末尾元素交换,将最大元素"沉"到数组末端;

      3.重新调整结构,使其满足堆定义,然后继续交换堆顶元素与当前末尾元素,反复执行调整+交换步骤,直到整个序列有序

 

归并排序(MergeSort)

步骤:

        1. 把长度为n的输入序列分成两个长度为n/2的子序列。

        2. 对这两个子序列分别采用归并排序。

        3. 将两个排序好的子序列递归合并成一个最终的排序序列。

 

桶排序(Bucket Sort)

步骤:

        1. 创建等容量的桶数组,并将桶数组元素都初始化为0

        2. 逐个遍历数组,将数组的值,作为桶数组的下标。数据被读取时,就将桶的值加1。

        3. 将桶数组不为0的的值的key取出,数量为该key的值

改进:

       基数排序计数排序

 

基数排序(Radix Sort)

步骤:

        1. 将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。

        2. 从最低位开始,依次进行一次排序。

 

计数排序(count sort)

步骤:

  1. 找出序列中最大值和最小值,开辟Max-Min+1的辅助空间
  2. 最小的数对应下标为0的位置,遇到一个数就给对应下标处的值+1,。
  3. 遍历一遍辅助空间,就可以得到有序的一组序列







以上是关于排序算法对比,步骤,改进的主要内容,如果未能解决你的问题,请参考以下文章

排序算法

Java实现快速排序

算法希尔排序

排序算法之希尔排序

排序算法07----------------------希尔排序

数据结构和算法-排序算法-希尔排序