【Java】七大基础排序算法-效率测试
前言
这些排序算法到底有什么差别?出于好奇,所以进行了本次测试。
前面几篇文章总结了七大排序的原理、写法以及优化方法,这篇文章我将利用一个简单的测试程序来对这些排序算法的效率进行一个对比测试。其中排序算法和测试程序都总结在往期文章里。🚀
一、测试对象
⚠️点击小火箭查看程序的具体实现
🚀冒泡排序(bubbleSort)
🚀基础选择排序(selectionSort)
🚀双向选择排序(selectionSortBP)
🚀基础插入排序(insertionShort)
🚀折半插入排序(insertionShortHalf)
🚀堆排序(heapSort)
🚀希尔排序(shellSort)
🚀归并排序(mergeSort)
🚀随机快排(quickSort1)
🚀三路快排(quickSort3)
二、测试程序与数据
⚠️点击小火箭查看程序具体实现🚀
//n表示需要生成的数组长度
int n = 1000;
//生成一个长度为n的近乎有序数组 times的值越小数组越有序
//times==0 表示生成的就是一个有序数组
int[] arr1 = Helper.generateSoredArray(n, 5);
//生成一个长度为n的随机且无大量重复值的数组
int[] arr2 = Helper.generateRandomArray(n, 0, Integer.MAX_VALUE);
//生成一个长度为n的随机且含大量重复值的数组 [left,right)区间越小重复值越多
//若区间为[0,1),则生成值全为0的数组
int[] arr3 = Helper.generateRandomArray(n, 0, 5);
⚠️通过改变测试程序里的参数,可以生成不同形式和规模的数据,以便我们更全面的测试
使用以下三种数据形式作为测试用例:
1. 近乎有序的数组;
2. 随机且不含大量重复值数组
3. 随机且包含大量重复值数组
本次测试数据规模选取比较极端
三、测试过程
🔵一共测试了10组数组,每一轮测试都给出了排名表,对比结果非常直观
1️⃣数组长度为 1千
数据初始化:
//数组长度n
int n = 1000;
//生成一个近乎有序数组,times的值越小,数组越有序
int[] arr1 = Helper.generateSoredArray(n, 3);
//生成一个随机且无大量重复值的数组
int[] arr2 = Helper.generateRandomArray(n, 0, Integer.MAX_VALUE);