排序算法对比,步骤,改进
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)
步骤:
- 找出序列中最大值和最小值,开辟Max-Min+1的辅助空间
- 最小的数对应下标为0的位置,遇到一个数就给对应下标处的值+1,。
- 遍历一遍辅助空间,就可以得到有序的一组序列
以上是关于排序算法对比,步骤,改进的主要内容,如果未能解决你的问题,请参考以下文章