1、i =0;i-) while(2*i+1n) j = 2*i+1; if (j+1) if(ajaj+1) j+; if(aiaj) t = ai; /交换数据 ai = aj; aj = t; i = j; else break; /输出构成的堆 System.out.println(原数据构成的堆:); for(h =0;h n;h+) System.out.print( + ah); /输出n for(i=n-1;0; t = a0; /于第i 个记录交换 a0 = ai; ai = t; k =0; while(2*k+1i) j = 2*k+1;aj+1) if(ak aj) t =
2、 ak; ak = aj; k = j; elseThe +(n-i)+times result is: /输出每步排序的结果 for(h=0;h+)+ah); System.out.println();二、 交换排序1、 冒泡排序(1)、对数组中的各数据,依次比较相邻的两个元素的大小。 (2)、如果前面的数据大于后面的数据,就交换着两个数据。经过第一轮的多次比较排序后,便可把最小的数据排好。(3)、再用同样的方法把剩下的数据逐个进行比较,最后便可按照从小到大的顺序排好数组各数据的大小。/* public static int BubbleSort(int numbers) int temp;
3、 /中间变量,交换变量用 int j; for (int i = 0; i numbers.length; i+) /从小到大的排列顺序 for (j = i + 1; j = numbersj) /依次比较 temp = numbersi; numbersi = numbersj; numbersj = temp; for(int h = 0; h h+) + numbersh); /Output return numbers; */ /冒泡排序2、 快速排序(1)、设定一个分界值,将数组分成左右两部分(2)、将大于等于分界值的数据集中到数组右边,小于的集中到左边(3)、然后,左边和右边的数
4、据可以独立排序(4)、重复上述过程,递归定义。public static void QuickSort(int a,int left,int right) int f,t; int rtemp = right ,ltemp = left; f = a(right+left)/2; /分界值 while(ltemp rtemp) while(altemp -rtemp; if (ltemp = rtemp) t = altemp; altemp = artemp; artemp = t; if(ltemp = rtemp) ltemp+; if (left rtemp) QuickSort(a,
5、left,ltemp-1); /递归调用 if(ltemp right) QuickSort(a,rtemp+1,right);三、 插入排序1、 插入排序先比较前两个数的大小,再将后面的数按照大小插入到合适的位置去。比如最小则插入到第一位前面,比当前数还要大则插入到最后面。2、 Shell排序(效率较高的一种排序方法)(1)、将有n个元素的数组分成n/2个数字序列,第一个数据和第n/2+1个数据为一对,(2)、依次循环使每一个序列对排好顺序(3)、然后,再变为n/4个序列,再次排序(4)、不断重复上述过程,直至序列减为最后一个。四、 合并排序首先将含有n个节点的待排序数据序列看做有n个长度为
6、1的有序子表组成,将他们两两合并,得到长度为2的若干有序子表;然后,再对这些子表进行两两合并,得到长度为4的若干有序子表;,重复上述过程,一直重复到最后的子表长度为n,从而完成排序过程。public static void mergeOne(int a,int b,int n,int len) /完成合并一次的方法,在mergeSort中调用,避免mergeSort处理中造成递归 int i,j,k,s,e; s = 0; while(s+len=n) e=n-1; /相邻有序段合并 k = s; i = s; j = s +len; while (is+len&j=e)=aj) bk+ =
7、ai+; bk+ = aj+;s+len) while (j s = e+1; if(s for(;sn;s+) bs = as;public static void mergeSort(int a,int n) /合并排序 int h,count,len,f; count = 0; /排序步骤 len = 1; /有序子列的长度 f = 0; /变量f作为标志 int p = new intn; while(len n) if (f=1) mergeOne(p,a,n,len); /p合并到a else mergeOne(a,p,n,len); /a合并到p len = len*2; /增加有序序列的长度 f = 1-f; /标志量,每次循环一次后改变f的值,使数组按对应的长度大小合并 count+;第 + count + times sort a.length; if(f=1)h ah = ph;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1