面试基础知识整理 —— 排序

1. 概述

1.1 排序

n 个对象的序列 R[0],R[1],R[2],…R[n-1]按其关键码的大小,进行由小到大(非递减)或由大到小(非递增)的次序重新排序的过程。

1.2 分类

排序方法可分为两大类

  • 内部排序
    在排序过程 ,所有数据都容纳在内存之中,适用数据量不太大的情形。
  • 外部排序
    内存无法容纳所有数据,还需使用外存,适用于数据量很大的情形。
1.3 稳定性

如果待排序的对象序列中,含有多个关键码值相等的对象,用某种方法排序后,这些对象的相对顺序不变,则是稳定的,否则不稳定。

1.4 内排序分类
  • 选择排序
    • 直接选择排序
    • 堆排序
  • 插入排序
    • 简单插入排序
    • 折半插入排序
    • 希尔排序
  • 交换排序
    • 冒泡排序
    • 快速排序
  • 归并排序
  • 基数排序

2. 选择排序

2.1 直接选择排序

方法:
首先在 n 个记录中选出关键码最小(最大)的记录,然后与第一个记录(最后第 n 个记录)交换位置,再在其余的 n-1 个记录中选关键码最小(最大)的记录,然后与第二 个记录(第 n-1 个记录)交换位置,直至选择了 n - 1 个记录。
稳定性:不稳定

2.2 堆排序

方法:第一步,建堆,形成初始堆(最大堆)。第二步,一系列的对象交换和重新调整堆。
稳定性:不稳定

3. 插入排序

V 0, V1 ,… , Vi -1 个对象已排好序,现要插入Vi 到适当位置

3.1 简单插入排序

稳定性: 稳定

3.2 折半插入排序

稳定性:稳定

3.3 希尔排序

方法
1 )取一增量(间隔 gap < n ),按增量分组,对每组使用直接插入排序或其他方法进行排序。
2 )减少增量(分的组减少,但每组记录增多)。直至增量为 1 ,即为一个组时。
稳定性:不稳定

4. 交换排序

4.1 冒泡排序

方法:
1 )从头到尾做一遍相邻两元素的比较,有颠倒则交换,记下交换的位置。一
趟结束,一个或多个最大(最小)元素定位。
2 )去掉已定位的的元素,重复 1 ,直至一趟无交换。
稳定性:稳定

4.2 快速排序

方法:
1 )在 n 个对象中,取一个对象(如第一个对象—基准 pivot ),按该对象的关键码把所有小于等于该关键码的对象分划在它的左边。大于该关键码的对象分划在它的右边。
2 ) 对左边和右边(子序列)分别再用快排序。
稳定性:不稳定

5. 归并排序

方法:
n 个长为 1 的对象两两合并,得 n/2 个长为 2 的文件
n/2个长为 2 的对象两两合并,得 n/4 个长为 4 的文件
……
2 个长为 n/2 的对象两两合并 , 得 1 个长为 n 的文件
稳定性:稳定

6. 基数排序

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值