java 希尔排序 归并排序 快速排序 三路快速排序
package demo;
import unit.Unit;
public class Three extends Abs {
public void sort() {
Unit ss = new Unit();
int[] ar = ss.genRandomArray(10000,1000);
for(int i=0; i<ar.length; i++){
System.out.print(" "+ar[i]);
}
System.out.println(" ");
double gap = ar.length;//增量长度
int dk,sentinel,k;
while(true){
gap = (int)Math.ceil(gap/2);//逐渐减小增量长度
dk = (int)gap;//确定增量长度
for(int i=0;i<dk;i++){
//用增量将序列分割,分别进行直接插入排序。随着增量变小为1,最后整体进行直接插入排序
for(int j=i+dk;j<ar.length;j = j+dk){
k = j-dk;
sentinel = ar[j];
while(k>=0 && sentinel<ar[k]){
ar[k+dk] = ar[k];
k = k-dk;
}
ar[k+dk] = sentinel;
}
}
//当dk为1的时候,整体进行直接插入排序
if(dk==1){
break;
}
}
for(int i=0; i<ar.length; i++){
System.out.print(" "+ar[i]);
}
}
}
java实现归并排序法
package demo; import unit.Unit; public class Five extends Abs { @Override public void sort() { Unit ss = new Unit(); int[] ar = ss.genRandomArray(1000000,1000000); for(int i=0; i<ar.length; i++){ System.out.print(" "+ar[i]); } System.out.println("dddddddddddddddddddddddd "); mergeSort(ar,0,ar.length-1); for(int i=0; i<ar.length; i++){ System.out.print(" "+ar[i]); } } private void mergeSort(int[] arr,int l ,int r){ if(l>=r){ return; } int mid = (l+r)/2; mergeSort(arr,l,mid); mergeSort(arr,mid+1,r); if(arr[mid]>arr[mid+1]){ merge(arr,l,mid,r); } } private void merge(int[] arr,int l ,int mid ,int r){ int[] aux = new int[r-l+1]; for(int i=l; i<=r; i++){ aux[i-l]=arr[i]; } int i =l,j=mid+1; for( int k=l ; k<=r ; k++){ //先判断索引的合法性 if( i>mid ){ arr[k] = aux[j-l]; j ++; }else if(j > r){ arr[k] = aux[i-l]; i++; } //对分成两边的数组进行比较 那个比较大就放入新的aux数组中 else if( aux[i-l] < aux[j-l] ){ arr[k] = aux[i-l]; i++; }else{ arr[k] = aux[j-l]; j++; } } } }
快速排序
package demo; import unit.Unit; import java.util.Random; public class Six extends Abs { @Override public void sort() { Unit ss = new Unit(); int[] ar = ss.genRandomArray(100,0); for(int i=0; i<ar.length; i++){ System.out.print(" "+ar[i]); } System.out.println("ddddddddddddddddddddddddd "); quitSort(ar,0,ar.length-1); for(int i=0; i<ar.length; i++){ System.out.print(" "+ar[i]); } } private void quitSort(int[] arr,int l,int r) { if(l >= r){ return; } int p = partition(arr,l,r); quitSort(arr, l,p-1); quitSort(arr,p+1,r); } private int partition(int[] arr,int l,int r){ int k = new Random().nextInt(r-l); k = k + l; swap(arr,l+1,k); int v = arr[l]; int j = l; for(int i= l+1; i<=r;i++){ if(arr[i]<v){ swap(arr,j+1,i); j++; } } swap(arr,j,l); return j; } private void swap(int[] arr, int j,int l){ int tempF ; tempF = arr[j]; arr[j] = arr[l]; arr[l] = tempF; } }
三路排序
package demo;
import unit.Unit;
import java.util.Random;
public class Eight extends Abs {
@Override
public void sort() {
Unit ss = new Unit();
int[] ar = ss.genRandomArray(10000,0);
for(int i=0; i<ar.length; i++){
System.out.print(" "+ar[i]);
}
System.out.println("ddddddddddddddddddddddddd ");
quitSortThree(ar,ar.length);
for(int i=0; i<ar.length; i++){
System.out.print(" "+ar[i]);
}
}
private void quitSortThree(int[] arr,int n) {
quitSortThreeWays(arr,0,n-1);
}
private void quitSortThreeWays(int[] arr,int l,int r){
if(l >= r){
return;
}
int k = new Random().nextInt(r-l);
k = k + l;
swap(arr,l+1,k);
int v = arr[l];
int lt = l;
int gt = r + 1;
int i = l+1;
while(i<gt){
if(arr[i]<v){
swap(arr,i,lt+1);
lt++;
i++;
}else if(arr[i] > v){
swap(arr,i,gt-1);
gt --;
}else{
i++;
}
}
swap(arr,l,lt);
quitSortThreeWays(arr,l,lt-1);
quitSortThreeWays(arr,gt,r);
}
private void swap(int[] arr, int j,int l){
int tempF ;
tempF = arr[j];
arr[j] = arr[l];
arr[l] = tempF;
}
}

浙公网安备 33010602011771号