5种java排序算法汇总工具类
工具类简单明了地总结了java的快速排序,希尔排序,插入排序,堆排序,归并排序五种排序算法,代码中并没有对这几种排序算法的一个说明,关于思想部分希望在自行查阅相关说明,这里只是对这几种算法进行一个概括,以供大家使用。
publicclassSort{
publicstatic<AnyTypeextendsComparable<?superAnyType>>voidinsertionSort(AnyType[]a){
insertionSort(a,0,a.length-1);
}
privatestatic<AnyTypeextendsComparable<?superAnyType>>voidinsertionSort(AnyType[]a,intleft,intright){
intj;//记录第一个比tmp小的元素的后边一位的位置
for(intp=left;p<=right;p++){
AnyTypetmp=a[p];
for(j=p;j>left&&tmp.compareTo(a[j-1])<0;j--){
a[j]=a[j-1];
}
a[j]=tmp;
}
}
publicstatic<AnyTypeextendsComparable<?superAnyType>>voidshellSort(AnyType[]arr){
intj;
for(intgap=arr.length/2;gap>0;gap/=2){
for(inti=gap;i<arr.length;i++){
AnyTypetmp=arr[i];
for(j=i;j>=gap&&tmp.compareTo(arr[j-gap])<0;j-=gap){
arr[j]=arr[j-gap];
}
arr[j]=tmp;
}
}
}
privatestaticintleftChild(inti){
returni*2+1;
}
privatestatic<AnyTypeextendsComparable<?superAnyType>>voidperculateDown(AnyType[]arr,inti,intsize){
AnyTypetmp=arr[i];
for(intchild;(child=leftChild(i))<size;i=child){
if(child!=size-1&&arr[child].compareTo(arr[child+1])<0){
child++;
}
if(tmp.compareTo(arr[child])<0){
arr[i]=arr[child];
}else{
break;
}
}
arr[i]=tmp;
}
publicstatic<AnyTypeextendsComparable<?superAnyType>>voidheapSort(AnyType[]arr){
for(inti=arr.length/2;i>=0;i--){
perculateDown(arr,i,arr.length);
}
for(inti=arr.length-1;i>=0;i--){
swapReferences(arr,0,i);
perculateDown(arr,0,i);
}
}
privatestatic<AnyTypeextendsComparable<?superAnyType>>voidswapReferences(AnyType[]arr,inti,intj){
AnyTypetmp=arr[i];
arr[i]=arr[j];
arr[j]=tmp;
}
publicstatic<AnyTypeextendsComparable<?superAnyType>>voidmergeSort(AnyType[]arr){
AnyType[]tmp=((AnyType[])newComparable[arr.length]);
mergeSort(arr,0,arr.length-1,tmp);
}
privatestatic<AnyTypeextendsComparable<?superAnyType>>voidmergeSort(AnyType[]arr,intstart,intend,AnyType[]tmp){
if(start<end){
intmid=(start+end)>>1;
mergeSort(arr,start,mid,tmp);
mergeSort(arr,mid+1,end,tmp);
merge(arr,start,mid,end,tmp);
}
}
privatestatic<AnyTypeextendsComparable<?superAnyType>>voidmerge(AnyType[]arr,intstart,intmid,intend,AnyType[]tmp){
inti=start,j=mid+1,k=start;
while(i<=mid&&j<=end){
if(arr[i].compareTo(arr[j])<0){
tmp[k++]=arr[i++];
}else{
tmp[k++]=arr[j++];
}
}
while(i<=mid){
tmp[k++]=arr[i++];
}
while(j<=end){
tmp[k++]=arr[j++];
}
for(intm=start;m<=end;m++){
arr[m]=tmp[m];
}
}
publicstatic<AnyTypeextendsComparable<?superAnyType>>voidquickSort(AnyType[]arr){
quickSort(arr,0,arr.length-1);
}
privatestatic<AnyTypeextendsComparable<?superAnyType>>voidquickSort(AnyType[]arr,intleft,intright){
if(left+LENGTH_DIFF<=right){
AnyTypepivot=medium(arr,left,right);
inti=left,j=right;
while(true){
while(arr[++i].compareTo(pivot)<0);
while(arr[--j].compareTo(pivot)>0);
if(i<j){
swapReferences(arr,i,j);
}else{
break;
}
}
swapReferences(arr,i,right);
quickSort(arr,left,i-1);
quickSort(arr,i+1,right);
}else{
insertionSort(arr,left,right);
}
}
privatestatic<AnyTypeextendsComparable<?superAnyType>>AnyTypemedium(AnyType[]arr,intleft,
intright){
intcenter=(left+right)/2;
if(arr[center].compareTo(arr[left])<0){
swapReferences(arr,center,left);
}
if(arr[left].compareTo(arr[right])>0){
swapReferences(arr,left,right);
}
if(arr[center].compareTo(arr[right])<0){
swapReferences(arr,center,right);
}
returnarr[right];
}
privatefinalstaticintLENGTH_DIFF=20;
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。