今天复习了一下一些简单的排序算法,贴出来给大家批评批评,顺便散一下分
还望各位指正一下
public class Sorts{
//冒泡排序
public static int[] bubble(int array[]){
int arr[] = array.clone();
for(int i=0;i<arr.length;i++)
for(int j=arr.length-1;j>i;j--)
if(arr[i]>arr[j])
swap(arr,i,j);
return arr;
}
//选择排序
public static int[] select(int array[]){
int arr[] = array.clone();
for(int i=0,k=0;i<arr.length;i++){
k = i;
for(int j=arr.length-1;j>i;j--)
if(arr[k]>arr[j])
k = j;
swap(arr,i,k);
}
return arr;
}
//插入排序
public static int[] insert(int array[]){
int arr[] = array.clone();
for(int i=0;i<arr.length;i++)
for(int j=i;j>0;j--)
if(arr[j]<arr[j-1])
swap(arr,j,j-1);
else
break;
return arr;
}
//归并排序
public static int[] merge(int array[]){
int arr[] = array.clone();
mergeSort(arr,0,arr.length-1,new int[arr.length]);
return arr;
}
private static void mergeSort(int arr[],int start,int end,int temp[]){
if(start>=end)
return;
int middle = start+(end-start)/2;
mergeSort(arr,start,middle,temp);
mergeSort(arr,middle+1,end,temp);
for(int i=start,j=start,k=middle+1;i<=end;i++)
if(j<=middle && k<=end)
if(arr[j]>arr[k])
temp[i] = arr[k++];
else
temp[i] = arr[j++];
else if(j<=middle)
temp[i] = arr[j++];
else if(k<=end)
temp[i] = arr[k++];
for(int i=start;i<=end;i++)
arr[i] = temp[i];
}
//Shell排序
public static int[] shell(int array[]){
int arr[] = array.clone();
int len = 1;
while(len<arr.length/3)
len = len*3+1;
for(;len>0;len=(len-1)/3)
for(int i=len;i<arr.length;i++)
for(int j=i;j>=len;j-=len)
if(arr[j]<arr[j-len])
swap(arr,j,j-len);
else
break;
return arr;
}
//快速排序
public static int[] quick(int array[]){
int arr[] = array.clone();
quickSort(arr,0,arr.length-1);
return arr;
}
private static void quickSort(int arr[],int start,int end){
if(start>=end)
return;
int partition = arr[end],s = start-1,e = end;
while(true){
while(arr[++s]<partition);
while(e>0 && arr[--e]>partition);
if(s>=e)
break;
swap(arr,s,e);
}
swap(arr,s,end);
quickSort(arr,start,s-1);
quickSort(arr,s+1,end);
}
private static void swap(int arr[],int i,int j){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static void main(String args[]){
int arr[] = new int[]{60,1,5,2,8,4,9,11,55,3,6,9,2,2,5,25,67,5,14,4,5,54,72,542,34,56,7,7,3,2,47,58,67,45,435,43};
arr = quick(arr);
for(int i=0;i<arr.length;i++)
System.out.print(arr[i]+(i==arr.length-1?"\n":","));
}
}