1 / 16
文档名称:

四种简单的排序算法.doc

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

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

分享

预览

四种简单的排序算法.doc

上传人:xxj16588 2016/2/26 文件大小:0 KB

下载得到文件列表

四种简单的排序算法.doc

相关文档

文档介绍

文档介绍:,逐个处理待排序的记录。每个记录与前面已经排好序的记录序列进行比较,并将其插入到合适的位置。假设数组长度为n,外层循环控制变量i由1至n-1依次递进,用于选择当前处理哪条记录;里层循环控制变量j,初始值为i,并由i至1递减,与上一记录进行对比,决定将该元素插入到哪一个位置。这里的关键思想是,当处理第i条记录时,前面i-1条记录已经是有序的了。需要注意的是,因为是将当前记录与相邻的上一记录相比较,所以循环控制变量的起始值为1(数组下标),如果为0的话,上一记录为-1,则数组越界。现在我们考察一下第i条记录的处理情况:假设外层循环递进到第i条记录,设其关键码的值为X,那么此时有可能有两种情况:,那么就交换它们,直到上一记录的关键码比X小或者相等为止。,那么之前的所有记录一定是有序的,且都比X小,此时退出里层循环。外层循环向前递进,处理下一条记录。算法实现(C#)lassSortAlgorithm{//插入排序publicstaticvoidInsertSort<T,C>(T[]omparer)whereC:IComparer<T>{for(inti=1;i<=-1;i++){//("{0}:",i);intj=i;while(j>=1&&pare(array[j],array[j-1])<0){swap(refarray[j],refarray[j-1]);j--;}//();//(array);}}//交换数组array中第i个元素和第j个元素privatestaticvoidswap<T>(refTx,refTy){//("{0}<-->{1}",x,y);Ttemp=x;x=y;y=temp;}}()()方法仅仅是出于测试方便,PrintArray()方法依次打印了数组的内容。swap<T>()方法则用于交换数组中的两条记录,也对交换数进行了打印(这里我注释掉了,但在测试时可以取消对它们的注释)。外层for循环控制变量i表示当前处理第i条记录。lassAlgorithmHelper{//打印数组内容publicstaticvoidPrintArray<T>(T[]array){("Array:");foreach(Titeminarray){("{0}",item);}();}}//parer,parerFactory{parer<int>parer(){parer();}parer:IComparer<int>{pare(intx,inty){pareTo(y);}}}parerFactory类,parer对象,parer<T>接口,规定了两个int类型的关键码之间比较大小的规则。如果你有自定义的类型,比如叫MyType,parerFactory中再添加一个类,parer,parer<T>接口,parer就可以了。输出演示(C#)接下来我们看一下客户端代码和输出:staticvoidMain(string[]args){int[]array={42,20,17,13,28,14,23,15};//int[]array={9,8,7,6,5,4,3,2,1,0};(array);(());}算法实现(C++)//parer{public:staticboolSmaller(intx,inty){returnx<y;}staticboolEqual(intx,inty){returnx==y;}staticboolLarger(intx,inty){returnx>y;}};//插入排序template<classT,classC>voidInsertSort(Ta[],intlength){for(inti=1;i<=length-1;i++){intj=i;while(j>=1&&C::Smaller(a[j],a[j-1])){swap(a[j],a[j-1]);j--;}}},而需要设计一个数组排序的算法,那么很有可能设计出的就是泡沫排序算法了。因为它很好理解,实现起来也很简单。它也含有两层循环,