你所不知道的Java十种经典排序算法
算法分类 比较排序:在排序的最终结果里,元素之间的次序依赖于他们之间的比较,每个数必须和其他数进行比较,才能确定自己的位置。 优势:适用于一切需要排序的情况。不在乎数据的分布,适用于各种规模的数据 冒泡排序、快速排序、插入排序、希尔排序 、堆排序、选择排序、归并排序。 在冒泡排序之类的排序中,问题规模为n,又因为需要比较n次,所以平均时间复杂度为O(n²)。在归并排序、快速排序之类的排序中,问题规模通过分治法消减为logN次,所以平均时间复杂度为O(nlogn)。 非比较排序:只要确定每个元素之前的已有的元素个数即可,所有一次遍历即可解决。时间复杂度为O(n)。 计数排序、基数排序、桶排序。 非比较排序的时间复杂度低,但是需要占用空间来确定唯一的位置。 递归factorial 方法内部调用方法本身 ⚠️递归的层级太深容易造成栈内存溢出stackOverFlowError 冒泡排序 一次比较相邻的两个元素,如果第一个比第二个大就交换它们两个。 从第一对到结尾的最后一对,重复比较。 重复前面两个步骤(每次都能找到一轮中的最大值)。 算法分析: 最佳情况:T(n) = O(n) 最差情况:T(n) = O(n²) 平均情况:T(n) = O(n²) public static int [ ] bubbleSort ( int [ ] array ) { if ( array .