1T数据快速排序!十种经典排序算法总结( 七 )

< originalArray.length; i++) {originalArray[i] = 0;}} else {for (int i = 0; i < originalArray.length; i++) {originalArray[i] = replaceArray[i];}}}11 复杂度及稳定性
1T数据快速排序!十种经典排序算法总结文章插图
(其中:

  1. k表示计数排序中最大值和最小值之间的差值;
  2. l表示桶排序中桶的个数;
  3. d表示基数排序中最大值的位数 , r表示是多少进制;
  4. 希尔排序的时间复杂度很大程度上取决于增量gap sequence的选择 , 不同的增量会有不同的时间复杂度 。 文中使用的“gap=length/2”和“gap=gap/2”是一种常用的方式 , 也被称为希尔增量 , 但其并不是最优的 。 其实希尔排序增量的选择与证明一直都是个数学难题 , 而下图列出的是迄今为止大部分的gap sequence选择的方案)

1T数据快速排序!十种经典排序算法总结文章插图
12 小彩蛋:猴子排序在几十年的计算机科学发展中 , 诞生了很多优秀的算法 , 大家都在为了能开发出更高效的算法而努力 。 但是在这其中也诞生了一些仅供娱乐的搞笑算法 , 猴子排序就是其中的一种 。
猴子排序的实现很简单 , 随机找出两个元素进行交换 , 直到随机交换到最后能正确排好序的时候才会停止 。
【1T数据快速排序!十种经典排序算法总结】public int[] bogoSort(int[] array) {if (array == null || array.length < 2) {return array;}Random random = new Random();while (!inOrder(array)) {for (int i = 0; i < array.length; i++) {int swapPosition = random.nextInt(i + 1);if (swapPosition == i) {continue;}array[i] = array[i] ^ array[swapPosition];array[swapPosition] = array[i] ^ array[swapPosition];array[i] = array[i] ^ array[swapPosition];}}return array;}private boolean inOrder(int[] array) {for (int i = 0; i < array.length - 1; i++) {if (array[i] > array[i + 1]) {return false;}}return true;}


推荐阅读