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

zapdos 2007-08-07 08:35:13
还望各位指正一下

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":","));
}
}
...全文
602 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
piglet8792 2007-08-10
  • 打赏
  • 举报
回复
6.6
justicesun 2007-08-08
  • 打赏
  • 举报
回复
收藏,以后没准有用啊...哈哈
qixueqi 2007-08-08
  • 打赏
  • 举报
回复
go
roypayne 2007-08-08
  • 打赏
  • 举报
回复
不错。楼主!
justin_lin 2007-08-08
  • 打赏
  • 举报
回复
js
zapdos 2007-08-08
  • 打赏
  • 举报
回复
好,在各位的热切期望之下结了贴
zapdos 2007-08-08
  • 打赏
  • 举报
回复
呵呵,当然要在无序状态下比较才公平啊
纯粹的二分降解排序比起纯粹的快速排序是比不过的
但是在最后阶段改用插入排序优化,速度会有惊人的提高,不在本贴讨论范围之内

据说JAVA的METHOD CALL是非常快的,可以无视
  • 打赏
  • 举报
回复
帮你顶了,我希望还能被散到 1 分,已经是第 28 个回复了,看样子不可能了 555555~~~
RichardZ917 2007-08-08
  • 打赏
  • 举报
回复
不错,学习一下
iamsangster 2007-08-08
  • 打赏
  • 举报
回复
可以看到,对9000个数字排序,quick是最快的呀

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




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


试试倒序变正序就知道了, 就期望平均而言, 快速排序略优于 二分降解排序
rice4king 2007-08-08
  • 打赏
  • 举报
回复
mark!
熊孩子开学喽 2007-08-08
  • 打赏
  • 举报
回复
把swap函数代码直接放进排序代码中应该可以把差距进一步拉开
mutouhehe 2007-08-08
  • 打赏
  • 举报
回复
我为接分。
tl0352118 2007-08-08
  • 打赏
  • 举报
回复
学习
zapdos 2007-08-08
  • 打赏
  • 举报
回复
可能你的JDK是新版或旧版的吧,强制转一下型就可以的了
我的JDK是1.5的,并没有报错
pueler 2007-08-08
  • 打赏
  • 举报
回复
up
kafeiwu 2007-08-08
  • 打赏
  • 举报
回复
我编译 的有错误,问什么阿?
Sorts.java:8: incompatible types
found : java.lang.Object
required: int[]
int arr[] = array.clone();
^
Sorts.java:18: incompatible types
found : java.lang.Object
required: int[]
int arr[] = array.clone();
^
Sorts.java:31: incompatible types
found : java.lang.Object
required: int[]
int arr[] = array.clone();
^
Sorts.java:43: incompatible types
found : java.lang.Object
required: int[]
int arr[] = array.clone();
^
Sorts.java:69: incompatible types
found : java.lang.Object
required: int[]
int arr[] = array.clone();
^
Sorts.java:85: incompatible types
found : java.lang.Object
required: int[]
int arr[] = array.clone();
^
6 errors
olific 2007-08-08
  • 打赏
  • 举报
回复
的确是不错的东东
说不定以后就有用了。
顶!
kafeiwu 2007-08-08
  • 打赏
  • 举报
回复
猛一看,有点蒙,学习学习
zdjray 2007-08-08
  • 打赏
  • 举报
回复
现有的东西不用太花时间
加载更多回复(11)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧