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

图片镇楼

插入排序(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. 遍历一遍辅助空间,就可以得到有序的一组序列

原文地址:https://www.cnblogs.com/ydymz/p/9542732.html

时间: 2024-08-30 16:03:15

排序算法对比,步骤,改进的相关文章

排序算法系列——八大排序算法对比分析

本系列最后一篇,综合分析下前面介绍的八种排序算法的效率,以及各自的适用情况. 下面先看看八种排序算法的时间复杂度表格: 图中八种排序被分成了两组,一组时间复杂度为O(n^2),另一组相对高效些. 下面先对第一组O(n^2)的四种排序算法进行对比,分别取数组长度为100,1000,10000,100000四个数量级,各个元素在0-10000000之间随机获取.下面看下结果的分析. 排序算法 长度=100 长度=1000 长度=10000 长度=100000 直接插入排序 535 2,198 135

『算法设计_伪代码』线性时间排序及排序算法对比

一.计数排序 二.基数排序 三.桶排序 四.对比不同排序方法 原文地址:https://www.cnblogs.com/hellcat/p/9255591.html

排序算法对比

名称 稳定性 时间复杂度 空间复杂度 描述 数据对象为链表 平均 最坏 冒泡排序 Y O(n^2) O(1) 无序区,有序区. 选择排序 O(n^2) O(1) 有序区,无序区 稳定性Y,其它同数组 插入排序 Y O(n^2) O(1) 有序区,无序区 同数组 堆排序 O(n log n) O(1) 最大堆,有序区 归并排序 Y O(n log n) O(n)+O(log n) 将数据分为两段,逐段排序 空间复杂度O(1) 快速排序 O(n log n) O(n^2) O(log n)-O(n)

排序算法(二)——选择排序及改进

选择排序 基本思想 冒泡排序中有一个缺点,比如,我们比较第一个数a1与第二个数a2的时候,只要a1比a2大就会交换位置,但是我们并不能确定a2是最小的元素,假如后面还有比它更小的,该元素还会与a2再次进行交换,而且这种交换有可能发生多次才能确定a2的最终位置. 选择排序可以避免这种耗费时间的交换操作,从第一个元素开始,扫描整个待排数组,找到最小的元素放之后再与第一个元素交换位置,然后再从第二个元素开始,继续寻找最小的元素与第二个元素交换位置,依次类推. java实现 //选择排序 public

Java实现八大排序算法

本文对常见的排序算法进行了总结. 常见排序算法如下: 直接插入排序 希尔排序 简单选择排序 堆排序 冒泡排序 快速排序 归并排序 基数排序 它们都属于内部排序,也就是只考虑数据量较小仅需要使用内存的排序算法,他们之间关系如下: 稳定与非稳定: 如果一个排序算法能够保留数组中重复元素的相对位置则可以被称为是 稳定 的.反之,则是 非稳定 的. 直接插入排序 基本思想 通常人们整理桥牌的方法是一张一张的来,将每一张牌插入到其他已经有序的牌中的适当位置.在计算机的实现中,为了要给插入的元素腾出空间,我

数据结构杂谈(一)浅谈基本排序算法

0.基本概念 记录:待排序的项目 关键词:决定排序结果 稳定性:相同关键词的记录保持原来的相对次序 1.1插入排序(Insertion Sort) 算法思想 一种简单直观的排序算法,工作原理是通过构建有序序列:对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入. 算法描述 具体算法描述如下: 从第一个元素开始,该元素可以认为已经被排序 取出下一个元素,在已经排序的元素序列中从后向前扫描 如果该元素(已排序)大于新元素,将该元素移到下一位置 重复步骤3,直到找到已排序的元素小于或者等于

常用排序算法比较与分析

一.常用排序算法简述 下面主要从排序算法的基本概念.原理出发,分别从算法的时间复杂度.空间复杂度.算法的稳定性和速度等方面进行分析比较.依据待排序的问题大小(记录数量 n)的不同,排序过程中需要的存储器空间也不同,由此将排序算法分为两大类:[内排序].[外排序]. 内排序:指排序时数据元素全部存放在计算机的随机存储器RAM中. 外排序:待排序记录的数量很大,以致内存一次不能容纳全部记录,在排序过程中还需要对外存进行访问的排序过程. 先了解一下常见排序算法的分类关系(见图1-1) 图1-1 常见排

排序算法比较与分析

一.常用排序算法简述 下面主要从排序算法的基本概念.原理出发,分别从算法的时间复杂度.空间复杂度.算法的稳定性和速度等方面进行分析比较.依据待排序的问题大小(记录数量  n)的不同,排序过程中需要的存储器空间也不同,由此将排序算法分为两大类:[内排序].[外排序]. 内排序:指排序时数据元素全部存放在计算机的随机存储器RAM中. 外排序:待排序记录的数量很大,以致内存一次不能容纳全部记录,在排序过程中还需要对外存进行访问的排序过程. 先了解一下常见排序算法的分类关系(见图1-1) 图1-1 常见

十大排序算法(原理及代码实现细节)

本文参考一些书籍啊哈算法,数据结构与算法(清华大学),已经一些网上的博客 然后动图也是从网上偷来的(^_^),代码实现我尽量用大家容易懂的方式实现 数组居多,然后,桶排序(是别人代码,不过写的不完全正确后面会更新),都是学习嘛 有误的地方,还望各位指正,希望对你有帮助(其实很灵活的,在运用上),也不要这样就满足了 多多地运用,会使理解更深的. 按上面的顺序来吧 原理在代码里直接上动图吧 冒泡排序动图演示 冒泡排序代码实现 1 #include<iostream> 2 #include<c