读书人

今天复习了一下一些简单的排序算法贴

发布时间: 2012-02-17 17:50:42 作者: rapoo

今天复习了一下一些简单的排序算法,贴出来给大家批评批评,顺便散一下分
还望各位指正一下

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 ": ", "));


}
}

[解决办法]
学习
[解决办法]
为什么吧排序仅仅限定在int呢 呵呵
[解决办法]
学习学习~~
[解决办法]
Mark

[解决办法]
呵呵
不错不错
[解决办法]
不错。楼主!
[解决办法]
收藏,以后没准有用啊...哈哈
[解决办法]
hao
[解决办法]
接分
[解决办法]
不错的东西 值得学习
[解决办法]
现有的东西不用太花时间
[解决办法]
猛一看,有点蒙,学习学习
[解决办法]
的确是不错的东东
说不定以后就有用了。
顶!
[解决办法]
学习
[解决办法]
我为接分。
[解决办法]
把swap函数代码直接放进排序代码中应该可以把差距进一步拉开
[解决办法]
mark!
[解决办法]
可以看到,对9000个数字排序,quick是最快的呀

还有,刚刚试了编译超过10000的int数组,编译器竟然说我代码过长,晕
只好截到9000个


-----------------------------


试试倒序变正序就知道了, 就期望平均而言, 快速排序略优于 二分降解排序
[解决办法]
不错,学习一下
[解决办法]
帮你顶了,我希望还能被散到 1 分,已经是第 28 个回复了,看样子不可能了 555555~~~

读书人网 >J2SE开发

热点推荐