博客
关于我
力扣刷题——排序题目
阅读量:202 次
发布时间:2019-02-28

本文共 1240 字,大约阅读时间需要 4 分钟。

JAVA排序算法实现

0. JAVA的排序算法实现

Java提供了多种排序算法,适用于不同场景。以下是几种主要排序算法的实现和特点:

1. 选择排序

选择排序通过逐步将最小的元素交换到正确位置来实现。其工作原理如下:

  • 从数组中选择最小的元素,将其与第一个位置交换。
  • 重复这个过程,直到整个数组排序完成。

复杂度

  • 时间复杂度:O(N²)
  • 空间复杂度:O(1)
  • 稳定性:不稳定

2. 冒泡排序

冒泡排序通过相邻元素的交换来实现排序。其优化版本的步骤如下:

  • 从左到右不断交换相邻逆序元素。
  • 一轮循环后,最大的元素会浮到数组顶端。
  • 如果一轮没有交换,数组已排序,可以直接终止。

复杂度

  • 时间复杂度:O(N²)
  • 空间复杂度:O(1)
  • 稳定性:稳定

3. 插入排序

插入排序通过将元素插入已排序数组的左侧实现。其工作原理如下:

  • 从第二个元素开始,依次将当前元素插入到左侧已排序数组中。
  • 插入后,左侧数组保持有序状态。

插入排序的逆序数量

  • 平均情况下:N²/4次比较和交换
  • 最坏情况下(倒序数组):N²/2次比较和交换
  • 最好情况下(正序数组):N-1次比较,0次交换

复杂度

  • 时间复杂度:O(N²)
  • 空间复杂度:O(1)

4. 希尔排序(优化的插入排序,不稳定)

希尔排序通过分组(间隔)进行排序,减少了插入排序的较慢速度。其工作原理如下:

  • 使用插入排序对间隔h的序列进行排序。
  • 逐渐减小h,最终令h=1,得到整个有序数组。

优势

  • 希尔排序每次可以减少多于一个逆序。
  • 时间复杂度:N的若干倍 × 递增序列的长度

5. 堆排序(不稳定)

堆排序利用堆结构实现排序,适合原地排序。其工作原理如下:

  • 堆结构:每个节点的值大于等于或小于等于其子节点的值。
  • 根据完全二叉树的性质,用数组表示堆。
  • 父节点位置为k/2,子节点位置为2k和2k+1。

堆排序的实现

  • 大顶堆:根节点是最大值。
  • 小顶堆:根节点是最小值。

6. 归并排序(稳定,高效)

归并排序基于分治思想,通过分割和归并实现排序。其特点如下:

  • 归并排序需要辅助数组。
  • 时间复杂度:O(N log N)
  • 空间复杂度:O(N)

归并排序的关键函数

  • merge():将两个有序数组合并成一个有序数组。
  • 递归公式:将数组分成两部分,分别排序后归并。

7. 快速排序(不稳定,原地排序)

快速排序通过三分法切分数组,实现递归排序。其特点如下:

  • 基准选择:选择数组的中位数作为切分元素。
  • 时间复杂度:O(N log N),最坏情况下为O(N²)。
  • 空间复杂度:O(log N)

优化方法

  • 在小数组中使用插入排序。
  • 三数取中法:选择中位数作为切分元素。
  • 三向切分:适用于有大量重复元素的数组。

8. 归并排序与快速排序对比

稳定性

  • 归并排序稳定。
  • 快速排序不稳定。

复杂度

  • 归并排序:时间复杂度O(N log N),空间复杂度O(N)。
  • 快速排序:时间复杂度O(N log N),最坏情况O(N²),空间复杂度O(log N)。

算法思想

  • 两者均基于分治思想。

转载地址:http://nqqn.baihongyu.com/

你可能感兴趣的文章
Python关于isinstance函数的解析 | 附Demo(全)
查看>>
Python3:setup.py:完成所有任务的PIP安装(Build_ext+Install)
查看>>
python4.0 gil_Python 并发编程系列--1、浅谈GIL历史及对多线程的影响
查看>>
python60行绘图程序_天底下最简单的QT画图板,就一个类,60行代码
查看>>
Python: AES加密与解密
查看>>
Python: Range() 最大尺寸;动态的还是静态的?
查看>>
Python: Windows下用 multiprocessing 的深坑
查看>>
python:Could not find platform independent libraries <prefix>解决方法
查看>>
Python:datetime tzinfo 时区名称文档
查看>>
Python:deepcopy(list) vs new_list = old_list[:]
查看>>
Python:Google API - 从消息中获取 mimeTypes
查看>>
Python:Google API - 从消息中获取 mimeTypes
查看>>
Python:subprocess.call,stdout to file,stderr to file,在屏幕上实时显示stderr
查看>>
Python:TypeError:无法连接“str“和“int“对象
查看>>
Python:XPath 在 ElementTree 中不可用
查看>>
Python:从 FTP 服务器下载文件
查看>>
python:从列表中创建元组列表
查看>>
Python:从嵌套列表中删除重复项
查看>>
Python:从间隔映射到值
查看>>
Python:使用 shell=False 的子进程调用不起作用
查看>>