还剩2页未读,继续阅读
文本内容:
实验排序实验答案public class9_1{static intPartitionint[]a,int i=s,j=t;int base=a[s];//按表首元素为基准进行划分twhile i!=jint s,intwhile jia[j]=if//以表首元素为基准//从表两端交替向中间遍历,直至为止ji{;a[i]=a[j];i++base;while ija[i]=i++//从后向前遍历,找一个小于基准的a[j]if ij{;a[j]=a[i];j--[刀前移覆盖//aa[i]=base;return i;static voidQuicksortint a[],if st Partitiona,baseint i=s if ir//从前向后遍历,找一个大于基准的a[i]==k-1return;else ifk-1i后移覆盖Quicksort[i]a[j]a,s,i-else//aQuicksorta,i+1,static voidGetprekint[]a,ifQuicksortk=1k=n{a,0,//基准归位前out.nn-1,System.printf//返回归位的位置//快速排序int s,int t,int k//区间内至少存在两个元素的情况t;//找到第小的元素m//在左区间查找;1,k//在右区间查找t,k;//输出中前个最小元素a kint n,int k;k个最小元素”,k;for int i=0;ik;i++out.out.n nSystem.printf%2d,a[i];System.printin;参数错误,}else System.out.printf nk=^d\n”k;//将数组复制给数组b astatic void Copyint[]a,int[]b,int nfor int i=0;in;i++a[i]=b[i];}public static void mainString[]args{int[]b={4,7,8,l3,6,5,2;zint n=b.length;int[]a=new int
[100];Copy a,b,n;初始数序:;HSystem.out.printf\n for int i=0;in;i++n nSystem.out.printf%2d,a[i];out.GetprekSystem.printin;forintk=0;k=n+1;k++{a,n,k;实验Copya,b,n;}public class9_2{//表示INF=static finalint0x3f3f3f3f;输出[工high//a ow..high]{static void disp int a[],int low,int forinti=low;i=high;i++System.out.printfH%3dH a[i];z.out.System printin;//求数组中最小元素的序号x minkstaticint Min3int[]x intmink=0;forinti=1;i3;i++if x[i]x[mink]mink=i;//最小元素为时返回INF8if x[mink]==return-1;return mink;static voidMerge3int a[]int low,int midi,int mid2,int highz、和三路归并[low..midi]a[midl-hl..mid2]a[mid2+l..high]//aint i=low,j=midi+1,k=mid2+1,mink,int[]new int[high-口int newint
[3];扫描第段,扫描完毕取值gINF;0x
[0]x
[0]i=midia[i]//I扫描第段,扫描完毕取值扫INF;1x
[1]x[l]j=mid2a//j扫描第段,描完毕取值-k INF;//k2x
[2]x
[2]=high[j]while true个有序段都扫描完毕,退出归并过程if mink==-1//3break;Min3mink=x;switch minkcase0:b[n]扫描第段取值g:INF;//i0x
[0]=i=midi a[i]break;case1:b[n];j++扫描第段取值g INF;//j1x[l]=j=mid2break;case2:b[n]n++;k++;扫描第段取值g INF;//k2x
[2]=k=high a[k]break;n++;//将复制回中RI Rfork=0,i=low;i a[i]=high;k++,i++=b[k];//三路归并排序递归算法staticvoidMergeSort3int a[],inti,int jintm,ml,m2;ifij{m=j-i+1/3;ml=i+m;m2=i+2*m;//第段排序MergeSort3a[i.a,i,ml;排序・・System,out.printfa[%d%d]:”,i,ml;dispa,i,ml;//第段序MergeSort31a[ml+1,.m2]^Fa,ml+1m2;r力序•招・nSystem,out.printfF a[%d d]:”,ml+1,m2;disp a,ml+1,m2;//第段排序MergeSort32a[m2+l・.j]a,m2+1j;r用序・・System,out.printfF a[%ci%d]:”,m2+1,j;disp a,m2+1,j;//合并个段Merge33a,i,ml,m2,j;合并•之・dispa,System,out.printfa[%dd]:,i,j;i,j;//三路归并排序算法staticvoidMergeSort inta[],int nMergeSort3a,0,n-1;}public staticvoid mainString[]args{inta[]={10,9,8,7,6,5,4,3,2,1;intn=a.length;初始数序n;dispSystem.out.printf\n a,0,n-1;MergeSorta,n;。