五种排序算法的分析与比较
C语言数组的五种简单排序,选择法排序,冒泡法排序、交换法排序、插入法排序、折半法排序

C语⾔数组的五种简单排序,选择法排序,冒泡法排序、交换法排序、插⼊法排序、折半法排序⽂章⽬录1、选择法排序选择法排序是指每次选择索要排序的数组中的最⼩值(这⾥是由⼩到⼤排序,如果是由⼤到⼩排序则需要选择最⼤值)的数组元素,将这些数组元素的值与前⾯没有进⾏排序的数组元素值进⾏互换代码实现需要注意的是:声明⼀个数组和两个整形变量,数组⽤于存储输⼊的数字,⽽整形变量⽤于存储最⼩的数组元素的数值与该元素的位置,在我的代码中实现为a[] temp position。
代码具体如下#include<stdio.h>int main(){int m,n,k;printf("please input the length of the array:");scanf("%d",&k);int a[k];int temp;int position;printf("please input the number of the array:\n");for(m=0;m<k;m++){printf("a[%d]=",m+1);scanf("%d",&a[m]);}/*从⼩到⼤排序*/for(m=0;m<k-1;m++){temp=a[m]; //设置当前的值为最⼩值position=m; //记录当前的位置for(n=m+1;n<k;n++){if(a[n]<temp){temp=a[n]; //如果找到⽐当前的还要⼩的数值,则更换最⼩的数值与位置position=n;}}a[position]=a[m];a[m]=temp;}for(m=0;m<k;m++){printf("%d\t",a[m]);}return 0;}结果如下2、冒泡法排序冒泡法排序就是值在排序时,每次⽐较数组中相邻的两个数组元素的值,将⽐较⼩的(从⼩到⼤排序算法,如果是从⼤到⼩排序算法就是将较⼤的数排在较⼩的数前⾯)排在⽐较⼤的前⾯在代码实现的过程中:声明⼀个数组与⼀个整型变量,数组⽤于存放数据元素,整型变量⽤于交换时作为中间变量。
各种排序算法的总结和比较

各种排序算法的总结和比较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、冒泡排序:冒泡排序通过依次比较相邻两个元素的大小,将较大(或较小)的值向右交换(或左交换),最终得到一个有序序列。
其时间复杂度为O(n^2)。
2、选择排序:选择排序通过依次选取未排序部分的最小(或最大)值,将其与第一个未排序元素交换,最终得到一个有序序列。
其时间复杂度也为O(n^2)。
3、插入排序:插入排序通过将一个元素插入到已排序序列的相应位置,最终得到一个有序序列。
其时间复杂度为O(n^2)。
4、归并排序:归并排序是应用分治思想的一种排序方式。
它将待排序数组分成若干个小段,每一段相互独立地进行排序,最终合并得到有序数组。
其时间复杂度为O(nlogn)。
5、快速排序:快速排序也是应用分治思想的一种排序方式。
它选择一个基准元素,将待排序数组分为小于基准元素和大于基准元素的两个子序列,对子序列进行递归排序,最终得到有序数组。
其时间复杂度为O(nlogn)。
二、排序算法在数据分析中具有广泛应用,以下是其应用领域的几个例子:1、数据预处理:为了提高模型训练的效率和预测的准确性,在训练模型之前需要对数据进行预处理,其中包括排序。
采用快速排序和归并排序,可以大幅提高排序时间,并更快地得到结果。
2、数据清洗:当大量数据来源于不同的平台或者渠道时,很容易产生重复数据。
为了去重,一种简单的方法是将数据排序,然后遍历数据寻找重复值。
排序算法可以帮助我们快速地找到重复值。
3、数据分析:在数据分析中,我们需要通过比较不同数据的大小,来寻找规律和关联性。
有序或部分有序的数据集可以让我们更容易地识别这种规律和关联性。
排序类算法(堆排,快排,铜排,插入排)汇总分析

tb=clock();
for(i=N/2;i>0;i--)
HeadAdjust(i,N);
for(i=N;i>1;i--){
a[0]=a[1];
a[1]=a[i];
a[i]=a[0];
HeadAdjust(1,i-1);
}
te=clock();
#include<string.h>
#include<time.h>
typedef struct node{
int data;
struct node *next1;
struct node *next2;
}NODE;
#define CreateNODE(p) p=(NODE *)malloc(sizeof(NODE));
#define DeleteNODE(p) free((void *)p);
int num=5;
void main()
{
NODE *h,*h1,*q,*p,*l,*first[10],*last[10];
int i,tep,k,k1,N,a[10],sum;
srand((unsigned)time(NULL));
printf("输入要排序的数的个数:\n");
scanf("%d",&N);
//CreateNODE(h1);
CreateNODE(h);
//h=p;h1=p;
p=h;
for(i=0;i<N;i++){
CreateNODE(q);
q->data=rand()%30000;
常用排序算法分析比较

常用排序算法分析比较排序算法是计算机科学中的基本概念之一,它主要用于对一组元素进行排序,使得这些元素按照某种规则有序排列。
常见的排序算法包括冒泡排序、插入排序、选择排序、快速排序、归并排序等等,这些算法都有自己的特点和适用场景,下面针对这些排序算法进行分析比较。
1.冒泡排序冒泡排序是一种简单的排序算法,它的主要思想是依次比较相邻的两个元素,如果它们的顺序不对就交换它们的位置,可以保证每次循环后最后一个元素是已经排序好的。
冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1)。
2.插入排序插入排序是一种稳定的排序算法,它的基本思想是将待排序的数据分为两个区间,已排序区间和未排序区间,在未排序区间内遍历,将每个元素插入到已排序区间的合适位置。
插入排序的时间复杂度为O(n^2),空间复杂度为O(1)。
3.选择排序选择排序是一种比较简单的排序算法,它的主要思想是通过不断选择未排序区间内的最小值,然后和未排序区间的第一个元素交换位置,以此类推,直到排序完毕。
选择排序的时间复杂度为O(n^2),空间复杂度为O(1)。
4.快速排序快速排序是一种经典的排序算法,它的思想是采用分治的思想,将序列分为左右两个子序列,通过递归的方式对左右两个子序列进行快速排序,最后合并两个排好序的子序列。
快速排序的时间复杂度为O(nlogn),空间复杂度为O(logn)。
5.归并排序归并排序是一种稳定的排序算法,它的基本思想是采用分治的思想,将序列分为左右两个子序列,通过递归的方式对左右两个子序列进行排序,最后将两个排好序的子序列合并成一个有序序列。
归并排序的时间复杂度为O(nlogn),空间复杂度为O(n)。
通过比较以上五种排序算法,可以发现每种算法都有自己的特点和适用场景,对于元素数量较少的情况下,可以选择冒泡排序、插入排序或选择排序,这些算法思路简单易懂,实现也比较容易;对于大规模数据排序,可以选择归并排序或快速排序,因为它们的时间复杂度比较优秀。
各种排序算法的作用和意义

各种排序算法的作用和意义在计算机科学和数据处理领域,排序是一个基本而重要的问题。
排序算法是解决排序问题的一种方法,通过对数据进行重新排列,使其按照特定的顺序排列。
不同的排序算法有着不同的作用和意义,下面将介绍几种常见的排序算法及其作用和意义。
1. 冒泡排序算法冒泡排序是一种简单直观的排序算法,通过不断比较相邻的元素并交换位置,将最大的元素逐渐“冒泡”到最后。
冒泡排序的作用是将一个无序的序列转化为一个有序的序列,适用于数据量较小且基本有序的情况。
冒泡排序的意义在于其简单易懂的思想和实现方式,对于初学者来说是一个很好的入门算法。
2. 插入排序算法插入排序是一种简单直观的排序算法,通过构建有序序列,对于未排序的数据,在已排序序列中从后向前扫描,找到相应位置并插入。
插入排序的作用是将一个无序的序列转化为一个有序的序列,适用于数据量较小且基本有序的情况。
插入排序的意义在于其相对简单的实现和较好的性能,在某些特定情况下比其他排序算法更高效。
3. 选择排序算法选择排序是一种简单直观的排序算法,通过不断选择剩余元素中的最小值,并与未排序部分的第一个元素交换位置,将最小的元素逐渐放到已排序的部分。
选择排序的作用是将一个无序的序列转化为一个有序的序列,适用于数据量较小的情况。
选择排序的意义在于其简单直观的思想和实现方式,对于初学者来说是一个很好的入门算法。
4. 快速排序算法快速排序是一种高效的排序算法,通过选择一个基准元素,将序列分成两部分,一部分元素小于基准,一部分元素大于基准,然后递归地对两部分进行排序。
快速排序的作用是将一个无序的序列转化为一个有序的序列,适用于数据量较大的情况。
快速排序的意义在于其高效的性能和广泛应用,是一种常用的排序算法。
5. 归并排序算法归并排序是一种稳定的排序算法,通过将序列拆分成长度为1的子序列,然后逐步合并子序列,直到合并为一个有序序列。
归并排序的作用是将一个无序的序列转化为一个有序的序列,适用于数据量较大的情况。
各种排序算法分析

i1 PjCj
j0
i1 1( j 1) 1i1 ( j 1)
j0 i
i j0
1((i 1)*i) i 1
i
2
2
直接插入排序算法评价5 —— 平均复杂度
• 直接插入排序的 总的比较次数为:
n
j1
n
1
1
n1
l1
j 2 2
2
2 l1
n 1 1 * (n 1)n 22
3 n n2 44
示例:{23,11,55,97,19,80}
第一趟: {23}, [起始只有一个记录]
{11, 23}
11
第二趟: {11,23},
{11,23,55}
55
第三趟: {11,23,55},
{11,23,55,97}
97
第四趟: {11,23,55,97},
{11,19,23,55,97}
19
第五趟: {11,19,23,55,97},
直接插入排序算法评价2
最小移动次数∶
M mi n n1n
最大移动次数∶
Mm
ax
n1
(i
i1
1)
n2 2
直接插入排序算法评价3
初始数据状态相关:
• 文件初态不同时,直接插入排序所耗费的时间有很大 差异。
– 若文件初态为正序,则算法的时间复杂度为O(n) – 若初态为反序,则时间复杂度为O(n2)
排序算法及算法分析
问题的提出:
• 为什么要排序?有序表的优点?缺点?
– 构造关系。
• 按照什么原则排序?
– 比较?
• 如何进行排序?
基本概念
• 排序(Sorting):
五种常见的排序方法

五种常见的排序方法排序是计算机科学中最基础、最重要的算法之一。
排序算法的目的是将一组数据按照某个规则进行排序,以便于查找、统计和分析。
排序算法在各个领域都有广泛的应用,如数据库查询、图像处理、搜索引擎等。
本文将介绍五种常见的排序方法,它们分别是冒泡排序、选择排序、插入排序、快速排序和归并排序。
一、冒泡排序冒泡排序是最简单、最容易理解的排序算法之一。
它的基本思想是将相邻的两个元素进行比较,如果前面的元素大于后面的元素,则交换它们的位置。
这样一轮下来,最大的元素就会“冒泡”到最后面。
接着进行下一轮比较,直到所有元素都排好序。
冒泡排序的时间复杂度为O(n^2),其中n为待排序元素的个数。
虽然冒泡排序的时间复杂度较高,但由于它的实现简单,所以在某些特定情况下还是有用武之地的。
二、选择排序选择排序是一种简单直观的排序算法。
它的基本思想是从待排序的元素中选择最小的元素,将它放在第一个位置;然后从剩余的元素中选择最小的元素,将它放在第二个位置;以此类推,直到所有元素都排好序。
选择排序的时间复杂度也是O(n^2),但相比冒泡排序,它的比较次数要少一些。
选择排序的优点是不占用额外的内存空间,但它的缺点是不稳定,即相同元素的相对位置可能会发生变化。
三、插入排序插入排序是一种简单而有效的排序算法。
它的基本思想是将待排序的元素插入到已排好序的元素中,使得插入后的序列仍然有序。
插入排序可以分为直接插入排序和希尔排序两种。
直接插入排序的时间复杂度为O(n^2),但如果待排序的元素已经基本有序,那么它的时间复杂度会降低到O(n)。
希尔排序是直接插入排序的改进版,它通过将待排序的元素分组,先对每个小组进行排序,然后逐步缩小组的大小,最终整个序列就会变得有序。
希尔排序的时间复杂度介于O(n)和O(n^2)之间,取决于所选的增量序列。
插入排序的优点是对于小规模的数据集合,它的效率比较高;缺点是不适用于大规模的数据集合,而且它是稳定排序算法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
五种排序算法的分析与比较广东医学院医学信息专业郭慧玲摘要:排序算法是计算机程序设计广泛使用的解决问题的方法,研究排序算法具有重要的理论意义和广泛的应用价值。
文章通过描述冒泡、选择、插入、归并和快速5种排序算法,总结了它们的时间复杂度、空间复杂度和稳定性。
通过实验验证了5种排序算法在随机、正序和逆序3种情况下的性能,指出排序算法的适用原则,以供在不同条件下选择适合的排序算法借鉴。
关键词:冒泡排序;选择排序;插入排序;归并排序;快速排序。
排序是计算机科学中基本的研究课题之一,其目的是方便记录的查找、插入和删除。
随着计算机的发展与应用领域的越来越广,基于计算机硬件的速度和存储空间的有限性,如何提高计算机速度并节省存储空间一直成为软件设计人员的努力方向。
其中,排序算法已成为程序设计人员考虑的因素之一[1],排序算法选择得当与否直接影响程序的执行效率和内外存储空间的占用量,甚至影响整个软件的综合性能。
排序操作[2,3],就是将一组数据记录的任意序列,重新排列成一个按关键字有序的序列。
而所谓排序的稳定性[4]是指如果在排序的序列中,存在前后相同的两个元素,排序前和排序后他们的相对位置不发生变化。
1 算法与特性1.1冒泡排序1.1.1冒泡排序的基本思想冒泡排序的基本思想是[5,6]:首先将第1个记录的关键字和第2个记录的关键字进行比较,若为逆序,则将2个记录交换,然后比较第2个和第3个记录的关键字,依次类推,直至n-1个记录和第n个记录的关键字进行过比较为止。
然后再按照上述过程进行下一次排序,直至整个序列有序为止。
1.1.2冒泡排序的特性容易判断冒泡排序是稳定的。
可以分析出它的效率,在最好情况下,只需通过n-1次比较,不需要移动关键字,即时间复杂度为O(n)(即正序);在最坏情况下是初始序列为逆序,则需要进行n-1次排序,需进行n(n-1)/2次比较,因此在最坏情况下时间复杂度为O(n2),附加存储空间为O(1)。
1.2选择排序1.2.1选择排序的基本思想选择排序的基本思想是[5,6]:每一次从待排序的记录中选出关键字最小的记录,顺序放在已排好序的文件的最后,直到全部记录排序完毕.常用的选择排序方法有直接选择排序和堆排序,考虑到简单和易理解,这里讨论直接选择排序。
直接选择排序的基本思想是n个记录的文件的直接排序可经过n-1次直接选择排序得到有序结果。
1.2.2选择排序的特性容易得出选择排序是不稳定的。
在直接选择排序过程中所需进行记录移动的操作次数最少为0,最大值为3(n-1)。
然而,无论记录的初始排序如何,所需进行的关键字间的比较次数相同,均为n(n-1)/2,时间复杂度为O(n2),附加存储空间为O(1)。
1.3插入排序1.3.1插入排序的基本思想插入排序的基本思想是[5,6]:每次将1个待排序的记录按其关键字大小插入到前面已经排好序的子文件中适当的位置,直到全部记录插入完成为止。
插入排序分直接插入排序、折半插入排序和希尔排序3类。
考虑到简单、易理解的因素,这里讨论直接插入排序,其基本思想是:初始时R[0]自成一个有序区,无序区为R[1,…,n-1],从i=1至i=n-1为止,依次将R[i]插入到当前的有序区中,生成含n个记录的有序区。
容易得出插入排序是稳定的。
1.3.2插入排序的特性当待排序文件为正序时,所需进行的关键字间比较的次数达最小值n-1,记录不需要移动;反之,逆序时比较次数达最大值(n+2)(n-1)/2,移动次数为(n+4)(n-1)/2,因此,其时间复杂度为O(n2),附加存储空间为O(1)。
1.4归并排序1.4.1归并排序的基本思想归并排序的基本思想是[7,8]:采用分治策略,将待排序文件分成大小大致相同的2个子集合,分别对2个子集合进行排序,最终将排好序的子集合并成所要求的排好序的集合。
假设初始序列含有n个记录,则可以将每个记录看成是长度为1的子序列,然后两两归并,得到对n/2 个长度为2或1的有序子序列;再两两归并,如此重复,直至得到1个长度为n的有序序列为止。
1.4.2归并排序的特性容易得出归并排序稳定。
归并排序算法对n个待排序记录进行排序,在最坏的情况下所需的计算时间T(n)满足: n≤1,T(n)=O(1); otherwise,T(n)=O(nlogn)。
附加存储空间为O(n)。
1.5快速排序1.5.1快速排序的基本思想快速排序的基本思想是[7,9]:具体过程如下,假设当前待排序序列为R[low,…,high],排序过程分为分解、求解和合并3个步骤:①分解,在R[low,…,high]中任选一个记录作为基准(base),以此基准将当前待排序序列分为左、右2个子区间,前者为R[low,…,base-1],均小于基准,后者为R[base+1,…,high],均大于基准,基准则处于正确的位置上;②求解,通过递归调用快速排序对左、右2个子区间进行快速排序;③合并,当求解中的2个递归调用结束时,左、右2个子区间已有序,即完成排序。
需附加存储空间为O(log2n).容易得出快速排序不稳定。
1.5.2快速排序的特性根据对此排序的描述,可以分2种情况讨论:1)当待排序序列有序(序列按正序排列)时,每次划分只得到1个比上一次少1个记录的子序列。
这样,必须经过n-1次才能把所有记录定位,而且第i次需要n-i次比较才能找到第i个记录的正确位置,故总的比较次数达到1/2*n(n-1)=O(n2)。
2)当排序序列是随机序列时,且T(n)是对n个记录的序列进行排序所需的时间,每次对1个记录正确定位后,正好把序列划分为长度相等的2个子序列,此时T(n)满足n≤1,T(n)=O(1); otherwise, T(n)=O(nlogn)。
2 性能评价2.1 实验与结果为了比较各种排序算法的性能,我们使用一台桌面电脑,在VS6.0环境下,用C语言编写程序,调用随机函数、时间函数来统计输入规模不同和排序不同的元素时五种排序算法的用时情况。
以下实验结果引用于[10]:五种排序算法的性能分析由表1可知:当输入规模为10 000时,5种排序算法的用时情况差不多,但随着输入规模的增大,快速排序算法的优势就体现出来,其次是归并排序,最差的是选择排序,插入排序略优于冒泡排序。
由表2可知:当输入序列是正序时,插入排序算法最佳,其次是归并排序,快速排序略优于冒泡排序,最差的是选择排序。
由表3可知:当输入序列是逆序时,归并排序算法是最理想的,最坏的是选择排序;输入规模在8 000个记录范围内时,插入排序和快速排序差不多,随着输入规模的增大, 快速排序比插入排序耗时更少;输入规模在4 000个记录范围内时,冒泡排序和选择排序几乎一样,差别极其微小,随着规模增大,冒泡排序优于选择排序。
2.2 算法性能评价评价排序算法好坏的标准主要有3条[11]:执行时间、所需的辅助空间以及算法的稳定性。
算法本身的复杂程度,即空间复杂度和时间复杂度。
如果所需的辅助空间并不依赖于问题的规模,即辅助空间是O(1),称之为就地排序;非就地排序一般要求的辅助空间为O(n)。
然而,时间复杂度[12]取决于算法本身涉及的记录之间的比较次数和交换次数。
总结排序算法比较(表4)综合比较上述讨论的几种内部排序算法,可得到如表4所示的结论。
根据表4,可以将5种排序算法按照平均时间分为2类:冒泡排序、选择排序、插入排序其时间复杂度为O(n2),即平方阶排序;归并排序、快速排序其时间复杂度为O(nlogn),即线性对数阶排序。
从平均时间性能而言,快速排序和归并排序优越于其他3种排序,所需时间最省,但在最坏情况下,快速排序则不如归并排序。
在输入规模较大时,快速排序比较有优势,但当输入规模不是很大时,5种排序算法的耗时相差无几。
就空间复杂度而言,快速和归并排序的辅助空间开销比较大,冒泡、选择、插入排序辅助空间开销比较少。
根据以上实验结果,可得出结论:当记录较小,基本有序,要求稳定时,则采用直接插入排序;若记录较小,分布随机,稳定性不做要求时,则采用直接选择排序;若记录较大,内存允许,要求排序稳定时,则采用归并排序。
所以在选择合适的排序算法时,应该考虑到算法本身的时间复杂度、空间复杂度和稳定性等.其具体的用法应根据应用环境而定,侧重点不同,则选择的排序方法也各异。
参考文献[1]王德超.常用排序算法的分析与比较.现代计算机,2012,6(1):36-40.[2]张铭,赵海燕,王腾蛟等.北京大学《数据结构与算法》教学设计[J],计算机教育,2008,11(20):64-68.[3]葛建梅.《数据结构》课程教学方法改革的思考[J],中国成人教育,2008,9(1),51-55.[4]范策,周世平,胡哓琨等.数据结构(C语言版).机械工业出版社,2004,8(4):81-93.[5]严蔚敏,吴伟民.数据结构[M].北京清华大学出版社,1997:263-289.[6]曹衍龙,林瑞仲,徐慧.C语言实例解析[M].北京人民邮电出版社,2007:94-117.[7]王晓东.计算机算法设计与分析[M].北京电子工业出版社,2007:21-25.[8]王颖,李肯立,李浪等.纵横多路并行归并算法[J].计算机研究与发展,2006,43(12):2180-2186.[9]周建钦.超快速排序算法[J].计算机工程与应用,2006,29(86):41-42.[10]淦艳,杨有.五种排序算法的性能分析.重庆文理学院学报(自然科学版),2010,29(3):45-50.[11]张建伟,张保威,郭云飞.一类分批排序问题的复杂性分析及近似算法[J].计算机工程与应用,2007,43(3):175-178.[12]刘模群.排序算法时间复杂度研究,软件导刊,2012,11(6):23-27.。