[ Java算法 ] - 排序算法(Sort Algorithm)解题模板

常用排序算法总览

插入排序法 直接插入排序 希尔排序
交换排序 冒泡排序 快速排序
选择排序 直接选择排序 堆排序
归并排序 基数排序

cite: https://github.com/hustcc/JS-Sorting-Algorithm


时间复杂度基础知识

注意:通常时间复杂度的有小到大排序依次为: O ( 1 ) < O ( log ⁡ 2 n ) < O ( n ) < O ( n log ⁡ 2 n ) < O ( n 2 ) < O ( n 3 ) < O ( n k ) < O ( 2 n ) < ( n ! ) {O\left( 1 \right) < O\left( { { {\log }_2}n} \right) < O\left( n \right) < O\left( {n{ {\log }_2}n} \right) < O\left( { {n^2}} \right) < O\left( { {n^3}} \right) < O\left( { {n^k}} \right) < O\left( { {2^n}} \right) < \left( {n!} \right)} O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(nk)<O(2n)<(n!)

  • O ( 1 ) {O\left( 1 \right) } O(1):常数阶,无论代码执行多少行,只要没有循环体就是常数阶。消耗的时间并不随着变量的增长而增长。
  • O ( log ⁡ 2 n ) {O\left( { { {\log }_2}n} \right)} O(log2n):对数阶,循环条件中,判断变量以二倍变化逼近结束条件。
  • O ( n ) {O\left( n \right)} O(n):线性阶,只循环n次,如一个for循环。
  • O ( n log ⁡ 2 n ) {O\left( {n{ {\log }_2}n} \right) } O(nlog2n):线性对数阶,将对数阶循环n次。
  • O ( n 2 ) {O\left( { {n^2}} \right)} O(n2):平方阶,两个线性阶嵌套。

通常优先讨论时间复杂度,使用空间换取时间。


交换方法

  • 数组类的排序通常把指定的位置交换的方法单独定义,这样可以提高代码的阅读性,下面第一种是普通交换方法,第二种是异或交换方法。加减法交换不推荐,有越界风险。
	// 临时中间变量交换法
	public static void swap(int[] arr, int i, int j) {
   
		int tmp = arr[i];
		arr[i] = arr[j];
		arr[j] = tmp;
	}
  • 当 i 严格保证与 j 不相同时,可以使用异或运算。
	// 异或法(重要的事说三遍:i与j不能相同!i与j不能相同!i与j不能相同!)
	public static void swap(int[] arr, int i, 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值