1 / 10
文档名称:

各种排序算法.doc

格式:doc   大小:23KB   页数:10页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

各种排序算法.doc

上传人:iris028 2020/1/10 文件大小:23 KB

下载得到文件列表

各种排序算法.doc

相关文档

文档介绍

文档介绍:要实现这几种算法的关键是要熟悉算法的思想。简单的说,冒泡排序,就如名字说的,每经过一轮排序,将最大的数沉到最底部。选择排序的思想是将整个数列,分为有序区和无序区。每轮排序,将无序区里的最小数移入到有序区。快速排序的思想是以一个数为中心,通常这个数是该数列第一个数,将整个数列分为两个部分,一个部分是大于这个数的区域,一个部分是小于这个数的区域。然后再对这两个部分的数列分别排序。如果将数列分为两个部分是通过,一方面从后向前的搜索,另一方面从前向后的搜索来实现的。具体的参考后面的来自百度百科的文档。从这几个简单的排序算法上看,有几个特点:冒泡排序是最简单的,也是最稳定的算法。选择排序不太稳定,但是效率上较冒泡还是有较大的提升。其实在分析的过程中就能发现,选择排序和冒泡排序相比,中间少了很多的交换过程,和比较的次数,这个应该是时间较少的原因。选择排序能够满足一般的使用。当比较的数超过以万为单位时,选择排序也还是要一点时间的。快速排序据说是最快的。这个可以从思想上看的出来。,当记录较多的时候,快速排序的比较循环次数比上面2个都要少。但是在具体的实现过程中,并不见得如此。这是因为递归效率的低下导致的。当然,估计在实际使用过的过程,快速排序估计都会使用非递归操作栈的方式来实现。那样应该会效率高伤不少。估计我会在后期出一个快速排序的非递归实现来真正比较它们3个性能。在下面的程序中,可以通过调高N的数字就能看的出来冒泡排序和选择排序性能的差异。在N较小,大概几百的时候,是看不出来的。N较大的的时候,比如N=1000或者N=10000的时候,快速排序的递归实现就会卡死在那里了,出不了结果。以下是具体的代码://经典冒泡排序voidBubbleSort(intarr[],intn){inti=0,j=0;for(i=0;i<n;i++)for(j=0;j<n-1-i;j++){if(arr[j]>arr[j+1]){arr[j]=arr[j]^arr[j+1];arr[j+1]=arr[j]^arr[j+1];arr[j]=arr[j]^arr[j+1];}}}//快速排序的递归实现voidQuickSort(intarr[],intn){if(n<=1)return;inti=0,j=n-1;intkey=arr[0];intindex=0;while(i<j){//从后向前搜索while(j>i&&arr[j]>key)j--;if(j==i)break;else{//交换a[j]a[i]arr[j]=arr[j]^arr[i];arr[i]=arr[j]^arr[i];arr[j]=arr[j]^arr[i];index=j;}//从前向后搜索while(i<j&&arr[i]<key)i++;if(i==j)break;else{//交换a[i]a[j]arr[j]=arr[j]^arr[i];arr[i]=arr[j]^arr[i];arr[j]=arr[j]^arr[i];index=i;}}QuickSort(arr,index);QuickSort(arr+index+1,n-1-index);}//选择排序voidSelectSort(intarr[],intn){inti,j;intmin;for(i=0;i<n-1;i++){intindex=0;m