排序算法 之 效率测试

前面我们写了常见的几种排序算法,并分析了各种算法的实现思想,及时间复杂度等情况,但由于只是分析,木有实际的数据做对比测试,所以对各个算法的效率也没有一个明确的概念,下面我们就通过具体的测试来看看同算法之间的效率差距。

声明11个长度为100的元素取值范围为0到1000的序列


int length = 100;
int[] testArray1 = new int[length];
int[] testArray2 = new int[length];
int[] testArray3 = new int[length];
int[] testArray4 = new int[length];
int[] testArray5 = new int[length];
int[] testArray6 = new int[length];
int[] testArray7 = new int[length];
int[] testArray8 = new int[length];
int[] testArray9 = new int[length];
int[] testArray10 = new int[length];
int[] testArray11 = new int[length];
Random random = new Random();

for (int i = 0; i < length; i++)
{
int temp = random.Next(0,1000);
testArray1[i] = temp;
testArray2[i] = temp;
testArray3[i] = temp;
testArray4[i] = temp;
testArray5[i] = temp;
testArray6[i] = temp;
testArray7[i] = temp;
testArray8[i] = temp;
testArray9[i] = temp;
testArray10[i] = temp;
testArray11[i] = temp;
}

运行测试,测试结果截图:

乍一看,几种算法之间效率好像木有差别,设置前几种时间复杂度比较高的算法还要快一点。别急,让我们增加序列中的元素数量再试一下,把length
=100改为length =1000再次运行测试,结果截图:

结果已经可以看出,时间复杂度低的算法是领先的,但效果好像不太明显。让我们把把length =1000改为length
=10000再次运行测试,测试结果截图:

这次测试结果已经有了质的改变,相信通过测试大家对不同时间复杂度算法之间的效率已经有了一个清晰的概念。

时间: 2024-10-05 19:21:53

排序算法 之 效率测试的相关文章

常见比较排序算法的耗时测试

一直知道插入排序在输入规模比较小时会有比较好的效率,但这个输入规模多少才算少却无从知晓,今天特意写了几个小程序分别测试了几种排序算法随输入规模增长的耗时情况. 测试环境 CPU 3.0GHz 双核  1G内存   centos虚拟机 g++ 4.9.1 预先构造100W个随机生成的整数数组,计算使用各种排序算法时的总耗时 插入排序  vs  冒泡排序 不出所料,插入排序基本在任何输入规模均优于冒泡排序. 插入排序  vs 快速排序 vs 归并排序 由下图可以看出,在输入规模小于100时,插入排序

三个基本排序算法的效率比较(冒泡,选择和插入)

1.冒泡算法. 冒泡算法是最基础的一个排序算法,每次使用第一个值和身后相邻的值进行比较,如果是升序将大数向左边交换,降序则向右边交换.最终将大数移动到一边,最终排成一个序列: public class Sorting { public void BubbleSorting() { int[] arr = new int[10]; Random rd = new Random(100); for (int i = 0; i < arr.Length; i++) { arr[i] = rd.Next

排序算法系列——八大排序算法对比分析

本系列最后一篇,综合分析下前面介绍的八种排序算法的效率,以及各自的适用情况. 下面先看看八种排序算法的时间复杂度表格: 图中八种排序被分成了两组,一组时间复杂度为O(n^2),另一组相对高效些. 下面先对第一组O(n^2)的四种排序算法进行对比,分别取数组长度为100,1000,10000,100000四个数量级,各个元素在0-10000000之间随机获取.下面看下结果的分析. 排序算法 长度=100 长度=1000 长度=10000 长度=100000 直接插入排序 535 2,198 135

各种基本算法实现小结(五)—— 排序算法

各种基本算法实现小结(五)-- 排序算法 (均已测试通过) * 选择排序 |____简单选择排序 |____堆排序 |____归并排序 * 交换排序 |____冒泡排序 |____快速排序 * 插入排序 |____直接插入排序 |____折半排序 |____希尔排序 * 分配排序 |____箱排序 |____基数排序 ====================================================================== 简单排序算法 1. 冒泡排序 测试环境

常用排序算法的python实现

排序算是编程最基本的算法问题之一了,熟练掌握排序算法也能加深自己对数据结构的理解,也能提高自己的编程能力,以下为个人参考许多大神博客后对常用排序算法的学习总结. 目录: 概述 冒泡排序 直接插入排序 简单选择排序 希尔排序 堆排序 归并排序 快速排序 算法的比较与测试 参考 1. 概述 所谓排序(sorting)就是整理数据的序列,使其按照特定顺序排列的操作.排序在现实生活中(如整理书籍,表格数据等),在计算领域中(如二分查找,图论的最小生成树的Kruskal算法)均有重要意义,所以一种高效的排

常见的排序算法(四):归并排序

归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法,效率为O(n·log n).该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行. 采用分治法: 分割:递归地把当前序列平均分割成两半. 集成:在保持元素顺序的同时将上一步得到的子序列集成到一起(归并). 归并操作(merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作.归并排序算法依赖归并操作. 归并排序代码如下: 1

动画 | 大学四年结束之前必须透彻的排序算法

目录 如何分析一个"排序算法"? 开始分析冒泡"排序算法" 开始分析"插入排序算法" 开始分析"选择排序算法" 开始分析"希尔排序算法" 开始分析"快速排序算法" 开始分析"并归排序算法" 开始分析"基数排序算法" 开始分析"堆排序算法" 为什么插入排序要比冒泡排序更受欢迎? 现如今大学生学习排序算法,除了学习它的算法原理.代码

Java8大排序算法

一.冒泡排序 基本思想:通过对待排序序列此前向后,依次比较相邻元素的值,若发现逆序则进行交换,使得较大的值从前面移动到后面,       类似于水下的气泡一样(是所有排序算法中效率最低的) public static void BobbleSort(int[] arr){ /*冒泡排序,时间复杂度为O(n^2)*/ if (arr == null || arr.length == 0){ return; } int temp = 0; // 临时变量,用于存放大的数 boolean flag =

选择排序 —— 排序算法系列

假设我们有如下一个数组: 使用选择排序算法对这个数组进行排序,步骤如下: 第 1 次 在下标0到6之间找到最小的数字,我们可以发现最小的数字是15,它在下标为4的位置上: 把下标4上面的数字跟下标0上面的数字互换,得到排序如下图的数组: 第 2 次 在下标1到6之间找到最小的数字,我们可以发现最小的数字是33,它在下标为5的位置上: 把下标5上面的数字跟下标1上面的数字互换,得到排序如下图的数组: 第 3 次 在下标2到6之间找到最小的数字,我们可以发现最小的数字是48,它在下标为5的位置上: