(Java)排序算法(一)——排序算法简介

排序算法简介

有关概念

排序:将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程叫做排序。
排序算法的稳定性

  • 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。
  • 不稳定:如果a原本在b前面,而a=b,排序之后a有可能会出现在b的后面。

内排序:所有排序操作都在内存中完成。
外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行。
时间复杂度:描述算法运行时间的函数,用大O符号表述;对排序数据的总的操作次数反映当Ñ变化时,操作次数呈现什么规律。
空间复杂度:描述算法所需要的内存空间大小。是指算法在计算机内执行时所需存储空间的度量,它也是数据规模Ñ的函数。

排序算法的分类

非线性时间比较类排序和线性时间非比较类排序

  1. 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。
  2. 线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序。
    在这里插入图片描述

比较和非比较排序的区别

比较排序:在排序的最终结果里,元素之间的次序依赖于它们之间的比较。每个数都必须和其他数进行比较,才能确定自己的位置。
优势:适用于各种规模的数据,也不在乎数据的分布,都能进行排序。可以说,比较排序适用于一切需要排序的情况。
劣势:时间复杂度较高

非比较排序:通过确定每个元素之前,应该有多少个元素来排序。针对数组arr,计算arr[i]之前有多少个元素,则唯一确定了arr[i]在排序后数组中的位置。只要确定每个元素之前的已有的元素个数即可,所有一次遍历即可解决。算法时间复杂度O(n)。
优势:时间复杂度低
劣势:由于非比较排序需要占用空间来确定唯一的位置。所以对数据规模和数据分布有一定的要求。

常用算法规律

在这里插入图片描述
n:数据规模;k:"桶"的个数;In-place:内排序;Out-place:外排序

常用的排序算法

交换两个元素的位置

在排序算法中经常使用在数组中交换两个元素的位置,所以封装一个方法,以便调用
后续的排序算法会用到

	/**
	  * 功能描述:交换两个元素在数组中的位置
	  */
	public static void swap(int[] arr, int i, int j) {
		arr[i] = arr[i] ^ arr[j];
		arr[j] = arr[i] ^ arr[j];
		arr[i] = arr[i] ^ arr[j];
	}

这种方式不理解参看我的另一篇博客:(Java版)算法——交换两个基本数据类型的变量值和数组中元素调换位置

后续不断更新排序算法……

发布了52 篇原创文章 · 获赞 68 · 访问量 7144

猜你喜欢

转载自blog.csdn.net/qq_42937522/article/details/105127670