【算法学习】 常见排序算法总结(java)

【算法学习】冒泡法排序

【算法学习】 选择排序算法

【算法学习】 插入排序算法

【算法学习】 希尔排序算法

【算法学习】 快速排序算法

【算法学习】 归并排序算法

【算法学习】 基数排序算法

【算法学习】 堆排序算法


【算法学习】 常见排序算法总结(java)_第1张图片

  • :如果a原本在b前面,而a=b,排序之后a仍然在b的前面 
  • 稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面
  • 排序:所有排序操作都在内存中完成
  • 排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行
  • 间复杂度: 一个算法执行所耗费的时间
  • 间复杂度:运行完一个程序所需内存的大小
  • In-place:    不占用额外内存
  • Out-place: 占用额外内存

稳定性:通俗地讲就是能保证排序前2个相等的数其序列的前后位置顺序和排序后他们两个的前后位置顺序相同

基本有序的情况下:快排最慢

常用排序算法的性能与待排数组的循序的关系总结:
1)冒泡:无关;
2)选择:无关;
3)插入:有关,有序程度越大,比较越少;
4)shell:有关,它的基本思想基于插入排序;
5)合并:有关,有序程度愈大,合并过程的比较次数越少;
6)堆排序:有关,有序程度越大,建立堆下沉操作越少;
7)快排序:有关,如果选择最后值作为阀值,那么有序程度越好,就越可能退化成O(n^2);

记忆方式

关于稳定性的记忆方法: 
1、直接插入排序和冒泡排序都是稳定的排序。归并排序是优化排序方式中唯一一种稳定的排序方式。 
2、希尔排序和快速排序是插入排序和交换排序的优化方式中的,不稳定的排序方式。 
3、选择排序和堆排序是具有共同性质,就是不稳定性。

不稳定的:快些选堆(快速排序,希尔排序,选择排序,堆排序)

时间复杂度的记忆方法: 
1、初始排序方式时间复杂度基本上都是O(n^2),其中包括插入排序,冒泡排序,选择排序。注意冒泡排序和插入排序的最好时间复杂度为O(n); 
2、优化的排序方式的时间复杂度基本上都是O(nlogn),其中包括快速排序,堆排序和归并排序。注意快速排序的最坏情况类似于冒泡排序,因此时间复杂度为O(n^2); 
3、希尔排序是个特例,无法计算它的时间复杂度。

可能会出题的

【算法学习】 常见排序算法总结(java)_第2张图片在待排序的元素序列基本有序的前提下,效率最高的排序方法是插入排序。

在待排序的数据表已经为有序时,花费时间反而最多的是快速排序。

练习

用某种排序方法对关键字序列(25,84,21,47,15,27,68,35,20)进行排序时,序列的变化情况如下:

20,15,21,25,47,27,68,35,84

15,20,21,25,35,27,47,68,84

15,20,21,25,27,35,47,68,84

则所采用的排序方法是——

这种靠数组变化判断排序方法的,除非特征明显,否则只能一个个看用排除法(例如选择排序——一趟只交换一对);

A、选择排序:一趟只交换一对,否;

B、希尔排序:(这个最难判断,可以放着最后再看);

C、归并排序:看第一趟,是否两两变成有序,否;

D、快速排序:先设定最左边是关键字,排完后再看左右子序列继续排,是。

你可能感兴趣的:(算法,数据结构与算法)