排序算法效率分析及总结

合集下载

实验报告算法分析

实验报告算法分析

实验报告算法分析实验报告:算法分析引言在计算机科学领域中,算法是解决问题的一种方法或步骤的描述。

通过对算法的分析,我们可以评估其效率和性能,从而选择最优的算法来解决特定的问题。

本实验报告旨在介绍算法分析的基本概念和方法,并通过实例来说明其应用。

一、算法分析的背景算法分析是计算机科学中的重要研究领域,它关注如何评估算法的效率和性能。

在实际应用中,我们经常面临着需要在有限的时间内解决大规模问题的挑战。

因此,选择一个高效的算法是至关重要的。

算法分析的目标是通过定量分析算法的时间复杂度和空间复杂度,为选择最佳算法提供依据。

二、算法分析的方法1. 时间复杂度分析时间复杂度是衡量算法执行时间的一种指标。

通常使用大O表示法来表示时间复杂度。

通过计算算法执行所需的基本操作次数,可以得到算法的时间复杂度。

常见的时间复杂度有O(1)、O(log n)、O(n)、O(n log n)和O(n^2)等。

时间复杂度越低,算法执行所需的时间越短。

2. 空间复杂度分析空间复杂度是衡量算法内存使用的一种指标。

通过计算算法执行所需的额外空间大小,可以得到算法的空间复杂度。

常见的空间复杂度有O(1)、O(n)和O(n^2)等。

空间复杂度越低,算法所需的内存空间越小。

三、算法分析的应用算法分析在计算机科学的各个领域都有广泛的应用。

以下是几个常见的应用示例:1. 排序算法排序算法是计算机科学中的经典问题之一。

通过对不同排序算法的时间复杂度进行分析,可以选择最适合特定需求的排序算法。

例如,快速排序算法的平均时间复杂度为O(n log n),在大规模数据排序中表现出色。

2. 图算法图算法是解决图结构相关问题的一种方法。

通过对图算法的时间复杂度和空间复杂度进行分析,可以选择最适合解决特定图问题的算法。

例如,广度优先搜索算法的时间复杂度为O(V+E),其中V和E分别表示图的顶点数和边数。

3. 动态规划算法动态规划算法是解决具有重叠子问题性质的问题的一种方法。

各种排序算法的总结和比较

各种排序算法的总结和比较

各种排序算法的总结和比较1 快速排序(QuickSort)快速排序是一个就地排序,分而治之,大规模递归的算法。

从本质上来说,它是归并排序的就地版本。

快速排序可以由下面四步组成。

(1)如果不多于1个数据,直接返回。

(2)一般选择序列最左边的值作为支点数据。

(3)将序列分成2部分,一部分都大于支点数据,另外一部分都小于支点数据。

(4)对两边利用递归排序数列。

快速排序比大部分排序算法都要快。

尽管我们可以在某些特殊的情况下写出比快速排序快的算法,但是就通常情况而言,没有比它更快的了。

快速排序是递归的,对于内存非常有限的机器来说,它不是一个好的选择。

2 归并排序(MergeSort)归并排序先分解要排序的序列,从1分成2,2分成4,依次分解,当分解到只有1个一组的时候,就可以排序这些分组,然后依次合并回原来的序列中,这样就可以排序所有数据。

合并排序比堆排序稍微快一点,但是需要比堆排序多一倍的内存空间,因为它需要一个额外的数组。

3 堆排序(HeapSort)堆排序适合于数据量非常大的场合(百万数据)。

堆排序不需要大量的递归或者多维的暂存数组。

这对于数据量非常巨大的序列是合适的。

比如超过数百万条记录,因为快速排序,归并排序都使用递归来设计算法,在数据量非常大的时候,可能会发生堆栈溢出错误。

堆排序会将所有的数据建成一个堆,最大的数据在堆顶,然后将堆顶数据和序列的最后一个数据交换。

接下来再次重建堆,交换数据,依次下去,就可以排序所有的数据。

Shell排序通过将数据分成不同的组,先对每一组进行排序,然后再对所有的元素进行一次插入排序,以减少数据交换和移动的次数。

平均效率是O(nlogn)。

其中分组的合理性会对算法产生重要的影响。

现在多用D.E.Knuth的分组方法。

Shell排序比冒泡排序快5倍,比插入排序大致快2倍。

Shell排序比起QuickSort,MergeSort,HeapSort慢很多。

但是它相对比较简单,它适合于数据量在5000以下并且速度并不是特别重要的场合。

快速排序的特点和原理

快速排序的特点和原理

快速排序的特点和原理快速排序是一种常用的排序算法,它的特点是速度快、效率高。

其原理是通过不断地将待排序序列分割成独立的两部分,其中一部分元素小于或等于基准值,另一部分元素大于或等于基准值,然后对这两部分继续进行排序,最终使整个序列有序。

快速排序的步骤可以总结为以下几个过程:1. 选择基准值:从待排序序列中选择一个元素作为基准值,一般选择第一个元素。

2. 分割操作:将待排序序列按照基准值进行划分,小于基准值的元素放在基准值的左边,大于等于基准值的元素放在基准值的右边。

3. 递归操作:对左右两个分区分别进行递归操作,直至分区内只有一个元素。

4. 合并操作:分区内的元素已经有序,将左右两个分区合并,即完成了一次快速排序。

具体来说,分割操作可以使用双指针法实现。

首先,将基准值设置为左边界的元素。

然后,将右指针从右向左移动,找到第一个小于基准值的元素。

接着,将左指针从左向右移动,找到第一个大于等于基准值的元素。

交换左右指针所指向的元素,使得左边的元素小于基准值,右边的元素大于等于基准值。

重复上述步骤,直至左指针和右指针相遇。

最后,将基准值与左指针所指向的元素交换位置,即完成了一次分割操作。

递归操作即对左右两个分区进行相同的分割操作,直至分区内只有一个元素,此时分区已经有序。

合并操作即将左右两个有序分区合并成一个有序序列,方法是将左分区的元素依次放在右分区的前面。

快速排序的时间复杂度为O(nlogn),其中n为待排序序列的长度。

其空间复杂度为O(logn),具有原地排序的特点。

快速排序的优点有以下几个:1. 速度快:快速排序的平均时间复杂度为O(nlogn),在大多数情况下表现出较高的效率。

2. 效率高:快速排序是一种原地排序算法,不需要额外的存储空间,只需对原始数组进行原地交换操作。

3. 应用广泛:快速排序适用于各种数据类型的排序,包括数字、字符和对象等。

4. 稳定性好:快速排序的稳定性较好,不存在像冒泡排序或插入排序中可能改变相同元素原有顺序的情况。

程序设计排序算法分析

程序设计排序算法分析
键字的分解法因关键 字的类 型而异 。基数排序分为最高位优先法和最 低位优先法 。
3 算法评价
3 . 1 稳定 性
交换排 序是指通 过在数 据元 素之间互 相交换逆序元素 而进行的排
序。交换排序包括冒泡排序和快速排序。
( 1 )冒泡排序 :通过将相邻 的数据元素进行 比较 , 若 逆序则交 换 ,逐步将无序序列处理成为有序序列。每一趟交换排序都会增加一 个元素到有序 区,整个 冒泡排序过程最多需要进行n 一 1 趟排序。 ( 2 ) 快速排序 :通过一趟排序 将待排序 的数据元 素分割成独立 的两部分 ,其中一部分数据元素的关键字均比另一部分数据元素的关 键字小 。则可分别对这两部分元素继续 进行排序 ,以达 到整个序列有
排序是程序设计的常见问题 ,选择合理高效的排序算法是数据处 理 的最重要 的研究 问题之一 。排序算法 的功能是将一个由一组数据元 素或 记录组成 的无序序列 ,重新排列成一个按关键字有序的序列【 1 ] 。 有序序列可有效地提高记录的查找效率。
1 排序 算法 分类
1 . 1 内部 排序
科学技术
程序 设计排序 算法分析
冯毅宏

杨英翔
刘 冬莉


( 沈 阳建 筑大 学信 息 与控 制工 程 学院 ,辽 宁 沈 阳 1 1 0 1 6 8)
要 :排序算法是计算机程序设计的一个重要内容 ,对排序算法的分析与研究具有广泛的应用价值。本文介绍了常见的排序算法,并通过对比
分析 ,对各种排序算法从算法评价角度给出了综合评价。 关键词:排序算法;内部排序;对比分析;算法评价
2 . 2 交 换排 序
箱 排序是 设置若 干个箱 子 ,依 次扫描 待排序 的数据 元素R 【 O 】 , R [ 1 】 ,… ,R [ n 一 1 】 ,把关键字等于k 的记录全都装入到第k 个箱子里( 分 配) ,然后按序号依次将各非空 的箱子首尾连接起来( 收集) 。 ( 2 ) 基数排序 基数排序 的算法是 :一个逻辑关键字可以看 成由若 干个关键字复 合而成的 ,可把每个排序关键字看成是一个d 元组 ,即例如由关键字K 由d 个关键 字 ( K 0 , K I ,…,K d 一 1 ) 组成 ,排序时先按K 0 的值从小到 大( 或从大到小 ) 将记 录分配到 盒子 中,然后依次收集这些记 录, 再按K 1 的值分配到r 个盒子 中,如此反复 ,直到按I ( d 一 1 的值分配后收集 起来的序列,便是完全排序 的状态 ,其中 为基数 。基数的选择 和关

排序方法实践心得体会

排序方法实践心得体会

一、引言在计算机科学领域,排序算法是基础且重要的内容之一。

通过对一组数据进行排序,可以使得后续的查找、统计等操作更加高效。

在实际应用中,不同的排序算法有着各自的特点和适用场景。

本文将从实践角度出发,分享我在学习排序方法过程中的心得体会。

二、排序算法概述1. 冒泡排序冒泡排序是一种简单的排序算法,其基本思想是相邻元素两两比较,若逆序则交换,直到整个序列有序。

冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1)。

2. 选择排序选择排序的基本思想是每次从待排序的序列中选出最小(或最大)的元素,放到序列的起始位置,然后继续对剩余未排序的序列进行同样的操作。

选择排序的时间复杂度为O(n^2),空间复杂度为O(1)。

3. 插入排序插入排序的基本思想是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增加1的有序表。

插入排序的时间复杂度为O(n^2),空间复杂度为O(1)。

4. 快速排序快速排序是一种高效的排序算法,其基本思想是选取一个基准值,将序列划分为两个子序列,一个包含小于基准值的元素,另一个包含大于基准值的元素,然后递归地对这两个子序列进行快速排序。

快速排序的平均时间复杂度为O(nlogn),最坏情况时间复杂度为O(n^2),空间复杂度为O(logn)。

5. 归并排序归并排序是一种分治算法,其基本思想是将序列划分为两个子序列,分别对这两个子序列进行排序,然后将排序好的子序列合并成一个有序序列。

归并排序的时间复杂度为O(nlogn),空间复杂度为O(n)。

6. 堆排序堆排序是一种基于堆的排序算法,其基本思想是将序列构造成一个大顶堆(或小顶堆),然后依次取出堆顶元素,并调整剩余元素,使新堆的堆顶元素仍为最大(或最小)。

堆排序的时间复杂度为O(nlogn),空间复杂度为O(1)。

三、实践心得体会1. 理论与实践相结合在学习排序算法时,首先要掌握各种排序算法的基本思想和原理,然后通过编程实践来加深理解。

各种排序方法总结

各种排序方法总结

选择排序、‎快速排序、‎希尔排序、‎堆排序不是‎稳定的排序‎算法,冒‎泡排序、插‎入排序、归‎并排序和基‎数排序是稳‎定的排序算‎法。

‎冒泡法‎:这‎是最原始,‎也是众所周‎知的最慢的‎算法了。

他‎的名字的由‎来因为它的‎工作看来象‎是冒泡:‎复杂度为‎O(n*n‎)。

当数据‎为正序,将‎不会有交换‎。

复杂度为‎O(0)。

‎直接插‎入排序:O‎(n*n)‎选择排‎序:O(n‎*n)‎快速排序:‎平均时间复‎杂度log‎2(n)*‎n,所有内‎部排序方法‎中最高好的‎,大多数情‎况下总是最‎好的。

‎归并排序:‎l og2(‎n)*n‎堆排序:‎l og2(‎n)*n‎希尔排序‎:算法的复‎杂度为n的‎1.2次幂‎‎这里我没‎有给出行为‎的分析,因‎为这个很简‎单,我们直‎接来分析算‎法:首‎先我们考虑‎最理想的情‎况1.‎数组的大小‎是2的幂,‎这样分下去‎始终可以被‎2整除。

假‎设为2的k‎次方,即k‎=log2‎(n)。

‎2.每次‎我们选择的‎值刚好是中‎间值,这样‎,数组才可‎以被等分。

‎第一层‎递归,循环‎n次,第二‎层循环2*‎(n/2)‎.....‎.所以‎共有n+2‎(n/2)‎+4(n/‎4)+..‎.+n*(‎n/n) ‎= n+n‎+n+..‎.+n=k‎*n=lo‎g2(n)‎*n所‎以算法复杂‎度为O(l‎o g2(n‎)*n) ‎其他的情‎况只会比这‎种情况差,‎最差的情况‎是每次选择‎到的mid‎d le都是‎最小值或最‎大值,那么‎他将变成交‎换法(由于‎使用了递归‎,情况更糟‎)。

但是你‎认为这种情‎况发生的几‎率有多大?‎?呵呵,你‎完全不必担‎心这个问题‎。

实践证明‎,大多数的‎情况,快速‎排序总是最‎好的。

‎如果你担心‎这个问题,‎你可以使用‎堆排序,这‎是一种稳定‎的O(lo‎g2(n)‎*n)算法‎,但是通常‎情况下速度‎要慢于快‎速排序(因‎为要重组堆‎)。

算法与分析实验报告

算法与分析实验报告

算法与分析实验报告一、引言算法是现代计算机科学中的核心概念,通过合理设计的算法可以解决复杂的问题,并提高计算机程序的执行效率。

本次实验旨在通过实际操作和数据统计,对比分析不同算法的执行效率,探究不同算法对于解决特定问题的适用性和优劣之处。

二、实验内容本次实验涉及两个经典的算法问题:排序和搜索。

具体实验内容如下:1. 排序算法- 冒泡排序- 插入排序- 快速排序2. 搜索算法- 顺序搜索- 二分搜索为了对比不同算法的执行效率,我们需要设计合适的测试用例并记录程序执行时间进行比较。

实验中,我们将使用随机生成的整数数组作为排序和搜索的测试数据,并统计执行时间。

三、实验步骤1. 算法实现与优化- 实现冒泡排序、插入排序和快速排序算法,并对算法进行优化,提高执行效率。

- 实现顺序搜索和二分搜索算法。

2. 数据生成- 设计随机整数数组生成函数,生成不同大小的测试数据。

3. 实验设计- 设计实验方案,包括测试数据的规模、重复次数等。

4. 实验执行与数据收集- 使用不同算法对随机整数数组进行排序和搜索操作,记录执行时间。

- 多次重复同样的操作,取平均值以减小误差。

5. 数据分析与结果展示- 将实验收集到的数据进行分析,并展示在数据表格或图表中。

四、实验结果根据实验数据的收集与分析,我们得到以下结果:1. 排序算法的比较- 冒泡排序:平均执行时间较长,不适用于大规模数据排序。

- 插入排序:执行效率一般,在中等规模数据排序中表现良好。

- 快速排序:执行效率最高,适用于大规模数据排序。

2. 搜索算法的比较- 顺序搜索:执行时间与数据规模成线性关系,适用于小规模数据搜索。

- 二分搜索:执行时间与数据规模呈对数关系,适用于大规模有序数据搜索。

实验结果表明,不同算法适用于不同规模和类型的问题。

正确选择和使用算法可以显著提高程序的执行效率和性能。

五、实验总结通过本次实验,我们深入了解了不同算法的原理和特点,并通过实际操作和数据分析对算法进行了比较和评估。

算法冒泡排序实验报告(3篇)

算法冒泡排序实验报告(3篇)

第1篇一、实验目的本次实验旨在通过实现冒泡排序算法,加深对排序算法原理的理解,掌握冒泡排序的基本操作,并分析其性能特点。

二、实验内容1. 冒泡排序原理冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。

遍历数列的工作是重复地进行,直到没有再需要交换,也就是说该数列已经排序完成。

2. 实验步骤(1)设计一个冒泡排序函数,输入为待排序的数组,输出为排序后的数组。

(2)编写一个主函数,用于测试冒泡排序函数的正确性和性能。

(3)通过不同的数据规模和初始顺序,分析冒泡排序的性能特点。

3. 实验环境(1)编程语言:C语言(2)开发环境:Visual Studio Code(3)测试数据:随机生成的数组、有序数组、逆序数组三、实验过程1. 冒泡排序函数设计```cvoid bubbleSort(int arr[], int n) {int i, j, temp;for (i = 0; i < n - 1; i++) {for (j = 0; j < n - i - 1; j++) {if (arr[j] > arr[j + 1]) {temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}}```2. 主函数设计```cinclude <stdio.h>include <stdlib.h>include <time.h>int main() {int n;printf("请输入数组长度:");scanf("%d", &n);int arr = (int )malloc(n sizeof(int)); if (arr == NULL) {printf("内存分配失败\n");return 1;}// 生成随机数组srand((unsigned)time(NULL));for (int i = 0; i < n; i++) {arr[i] = rand() % 100;}// 冒泡排序bubbleSort(arr, n);// 打印排序结果printf("排序结果:\n");for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}printf("\n");// 释放内存free(arr);return 0;}```3. 性能分析(1)对于随机生成的数组,冒泡排序的平均性能较好,时间复杂度为O(n^2)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C语言主流的排序算法效率分析及总结
班级:计科二班作者:XXX
日期:2016-3-29 工作:算法搜集及程序组合,结论总结。

星期二同组者:刘文
工作:程序测试,时间记录以及程序演示这次我们组主要搜集了冒泡排序算法,简单排序算法,直接插入排序算法,希尔排序算法,堆排序算法,快速排序算法六种常见的排序算法,并对它们的运行效率作了一个简单的测试与分析。

A冒泡排序:
算法思想简单描述:
在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。

即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。

冒泡排序是稳定的。

算法时间复杂度:O(N2)
下面我们来测试一下不同数据量的排序时间:
这是200个乱序随机数:
冒泡排序运行时间为0.000000毫秒
这是1000个乱序随机数:
冒泡排序运行时间为3.000000毫秒
这是5000个乱序随机数:
冒泡排序运行时间为70.000000毫秒
这是20000个乱序随机数:
冒泡排序运行时间为1464.000000毫秒
从不同数据量的纵向分析来看,
1,在冒泡排序算法里,随着数据量的增加,其运行时间也会越来越长。

2,在两百个数据的时候,其运行时间少到忽略不计,即运算瞬间完成。

这说明冒泡排序在处理小数据量的时候还是很给力的
3,当处理的数据量从5000提到20000的时候,冒泡排序的运行时间发生了质的增加。

从几十毫秒到几千毫秒,运行时间大大增加,从这里可见,冒泡排序在处理稍微大的数据的时候便已经显现出了力不从心感,我个人感觉已不大适用。

B 简单选择排序:
算法思想简单描述:
在要排序的一组数中,选出最小的一个数与第一个位置的数交换;然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。

选择排序是不稳定的。

时间复杂度:O(N2)
下面我们依然来测试一下简单选择排序在不同数据量的运行时间:
这是200个乱序随机数:
简单选择排序运行时间:0.000000毫秒
这是1000个乱序随机数:
简单选择排序运行时间:2.000000毫秒
这是5000个乱序随机数:
简单选择排序运行时间:44.000000毫秒
这是20000个乱序随机数:
简单选择排序运行时间:694.000000毫秒
从不同数据量的纵向分析来看,
1,其运行时间随着数据量的增加而增加
2,简单选择排序同冒泡排序一样,在处理像200个这样的小数据量的时候,其运行时间可以忽略不计,即瞬间完成
3,当数据量从5000提高到20000的时候,其运行时间也是提高了几十倍。

C 直接插入排序
算法思想简单描述:
在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。

如此反复循环,直到全部排好顺序。

直接插入排序是稳定的。

算法时间复杂度:O(N2)
下面我们来简单测试一下直接插入排序在不同数据量下的运行时间:
这是200个乱序随机数:
直接插入排序运行时间:0.000000毫秒
这是1000个乱序随机数:
直接插入排序运行时间:2.000000毫秒
这是5000个乱序随机数:
直接插入排序运行时间:42.000000毫秒
这是20000个乱序随机数:
直接插入排序运行时间:684.000000毫秒
从不同数据量的纵向分析来看:
直接插入排序在想200个这样的小数据量的时候执行非常快,效率高。

当数据量增加的20000的时候,运行时间会猛增几十倍,效率呈现下降趋势。

D 希尔排序
算法思想简单描述:
在直接插入排序算法中,每次插入一个数,使有序序列只增加1个节点,并且对插入下一个数没有提供任何帮助。

如果比较相隔较远距离(称为增量)的数,使得数移动时能跨过多个元素,则进行一次比较就可能消除多个元素交换。

算法先将要排序的一组数按某个增量d分成若干组,每组中记录的下标相差d.对每组中全部元素进行排序,然后再用一个较小的增量对它进行,在每组中再进行排序。

当增量减到1时,整个要排序的数被分成一组,排序完成。

希尔排序是不稳定的。

希尔排序时间复杂度:O(N1.3)(平均)最好的O(N)最差的O(N2)
下面我们来简单测试一下希尔排序在不同数据量的运行时间情况:
这是200个乱序随机数:
希尔排序运行时间为:0.000000毫秒
这是1000个乱序随机数:
希尔排序的运行时间:0.000000毫秒
这是5000个乱序随机数:
希尔排序的运行时间:1.000000毫秒
这是20000个乱序随机数:
希尔排序的运行时间:5.000000毫秒
从不同数据量的纵向分析来看:
从200个到20000量的随机数,希尔排序运行的时间都是非常快的,效率极高。

20000个数据的时候也仅仅只是5毫秒,这说明希尔排序在处理大数据的能力上非常优越。

E 堆排序
算法思想简单描述:
堆排序是一种树形选择排序,是对直接选择排序的有效改进。

堆的定义如下:具有n个元素的序列(h1,h2,...,hn),当且仅当满足(hi>=h2i,hi>=2i+1)或(hi<=h2i,hi<=2i+1)(i=1,2,...,n/2)时称之为堆。

在这里只讨论满足前者条件的堆。

由堆的定义可以看出,堆顶元素(即第一个元素)必为最大项。

完全二叉树可以很直观地表示堆的结构。

堆顶为根,其它为左子树、右子树。

初始时把要排序的数的序列看作是一棵顺序存储的二叉树,调整它们的存储顺序,使之成为一个堆,这时堆的根节点的数最大。

然后将根节点与堆的最后一个节点交换。

然后对前面(n-1)个数重新调整使之成为堆。

依此类推,直到只有两个节点的堆,并对它们作交换,最后得到有n个节点的有序序列。

从算法描述来看,堆排序需要两个过程,一是建立堆,二是堆顶与堆的最后一个元素交换位置。

所以堆排序有两个函数组成。

一是建堆的渗透函数,二是反复调用渗透函数实现排序的函数。

堆排序是不稳定的。

算法时间复杂度:O(nlog2n)。

下面我们测试一下堆排序在不同数据量的运行效果:
这是200个乱序随机数:
堆排序运行时间:0.000000毫秒
这是1000个乱序随机数:
堆排序运行时间:0.000000毫秒
这是5000个乱序随机数:
堆排序运行时间:1.000000毫秒
这是20000个乱序随机数:
堆排序运行时间:4.000000毫秒
从不同数据量的纵向分析来看:
堆排序不禁在处理小数据的时候效率非常高,就算处理几万个数据,也几乎是瞬间完成。

从200到20000个数据的运行结果来看,堆排序在处理大数据的能力上还是很强的。

F 快速排序
算法思想简单描述:
快速排序是对冒泡排序的一种本质改进。

它的基本思想是通过一趟扫描后,使得排序序列的长度能大幅度地减少。

在冒泡排序中,一次扫描只能确保最大数值的数移到正确位置,而待排序序列的长度可能只减少1。

快速排序通过一趟扫描,就能确保某个数(以它为基准点吧)的左边各数都比它小,右边各数都比它大。

然后又用同样的方法处理它左右两边的数,直到基准点的左右只有一个元素为止。

显然快速排序可以用递归实现,当然也可以用栈化解递归实现。

快速排序是不稳定的。

最理想情况算法时间复杂度:O(nlog2n),最坏O(n2)
下面我们测试一下快速排序在不同数据量的运行情况:
这是200个乱序随机数:
快速排序运行时间0.000000毫秒
这是1000个乱序随机数:
快速排序运行时间:2.000000毫秒
这是5000个乱序随机数:
快速排序运行时间18.000000毫秒
这是20000个乱序随机数:
快速排序运行时间85.000000毫秒
从不同数据量纵向分析来看:
随着数据量的增加,快速排序运行的时间也越来越长
在处理小数据量的时候,快速排序效率非常高
在处理大数据的时候,运行时间所花的也不是很长,是可以接受的,个人认为快速排序是一种比较平衡的算法。

横向分析这6种排序算法的效率:
在处理小数据量的时候,6中排序算法的效率都是非常可观的,都是可以接受的。

但根据算法具体来看,当数据本身信息量较大时,直接插入排序所需的记录移动操作较多,不宜采用。

简单选择排序会更好。

当数据量较大的时候,应采用时间复杂度O(N1.3)或O(nlog2n),即希尔排序,堆排序,快速排序都是极好的。

当记录本身信息量较大时,可以采用链表存储。

相关文档
最新文档