java中的几个排序

来源:互联网 发布:大数据产业上市公司 编辑:程序博客网 时间:2024/05/01 20:21

 

//冒泡排序
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;
}

}

原创粉丝点击