这里将介绍几种常见的内部排序算法,包括:直接插入排序、二分查找插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序。假设待排序的对象是整型数组,排序操作直接在数组上进行。下面直接上代码及相应注释。 ///<summary> ///各种排序算法实现 ///</summary> classInnerSortAlgorithm {///<summary>///直接插入排序算法。///<para>///往已经排好序的序列中插入待排元素,在查找待排元素位置时顺便进行元素移动。///</para>///</summary>///<paramname="iArr">给定待排序数组</param>publicvoidInnerSort_DirectInsert(int[]iArr){intlen=;inttempI;intj;for(inti=1;i<len;i++){tempI=iArr[i];j=i-1;while(j>=0&&iArr[j]>tempI){iArr[j+1]=iArr[j];j--;}iArr[j+1]=tempI;}}///<summary>///二分查找插入排序。///<para>///在已排好序的序列中插入元素,插入位置通过二分查找获得。///</para>///</summary>///<paramname="iArr">给定待排序数组</param>publicvoidInnerSort_BinaryInsert(int[]iArr){intlen=;intpos;inttempI;for(inti=1;i<len;i++){tempI=iArr[i];pos=FindInsertPosition(iArr,i-1,tempI);//查找待插入位置for(intj=i;j>pos;j--){iArr[j]=iArr[j-1];}iArr[pos]=tempI;}}///<summary>///二分查找确定待插入位置。///</summary>///<paramname="iArr">给定数组</param>///<paramname="endPos">已排序序列末尾下标</param>///<paramname="tempI">待插入元素</param>///<returns>返回插入位置</returns>privateintFindInsertPosition(int[]iArr,intendPos,inttempI){intstartPos=0;intmidPos;while(startPos<=endPos){midPos=(startPos+endPos)/2;if(iArr[midPos]>tempI){endPos=midPos-1;}else{startPos=midPos+1;}}returnstartPos;}///<summary>///希尔排序算法。///<para>///分组插入排序,按一定间隔先将序列分成n组,组内进行直接插入排序,再减小间隔直至1,完成排序。///</para>///</summary>///<paramname="iArr">给定待排序数组</param>publicvoidInnerSort_Shell(int[]iArr){i
内部排序算法实现C语言 来自淘豆网m.daumloan.com转载请标明出处.