用JAVA写了一个快速排序 大家帮我检查一下有没有错误 也太快了吧。。。
import java.util.Calendar;
/*
* 时间:2011.9.22下午
* 作用:快速排序
* 作者:张鹏飞
* 注意:如果打印输出 会非常慢
* */
//帮我看看有没有错误 设置 size就可以调整测试数据的数量 10000以上千万不要打印 不然很慢
//不打印 即使10000000 也才几秒钟 如果用冒泡 估计得半小时 。。。。也太快了吧 是不是我哪里写错了
public class first {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int size=1000;
int a[]=new int[size];
for(int i=0;i<a.length;i++)
a[i]=(int)(Math.random()*size);
for(int i=0;i<a.length;i++)
System.out.print(a[i]+" ");
quickSort test=new quickSort(a);
Calendar cal=Calendar.getInstance();
System.out.println("排序前:"+cal.getTime());//打印系统时间 来计算排序用时
test.sort(0,a.length-1);
cal=Calendar.getInstance();//重新调用系统时间
System.out.println("排序后:"+cal.getTime());
test.show();
}
}
class quickSort{
private int a[];
quickSort(int a[]){
this.a=a;
}
public void sort(int left, int right) {
int l = left;
int r = right;
if (l >=r)
return;
while(l<r){
while (l< r) {
if (this.a[l] >this.a[r]) {
//交换数字
int temp = this.a[l];
this.a[l] = a[r];
this.a[r] = temp;
l++;
break;
}
else r--;
}
while (l<r){
if(this.a[l]>this.a[r]){
int temp=this.a[l];
a[l]=a[r];
a[r]=temp;
r--;
break;
}
else l++;
}
}
sort(left, l-1);
sort(r+1, right);
}
void show(){
System.out.println("排序后为:");
for(int i=0;i<this.a.length;i++)
System.out.print(this.a[i]+" ");
}
}
------解决方案--------------------你写的应该没有错
如果使用Java的api的话,效果会更明显
Arrays.sort()这个方法是一个经过优化过的快速排序,它排序10000000个数据只用了2秒多
Java code
import java.util.*;
public class Test
{
public static void main(String[] args)
{
int size = 10000000;
int[] array = new int[size];
for (int i = 0; i < size; i++)
{
array[i] = (int) (Math.random() * size);
}
System.out.println("排列前:" + System.currentTimeMillis() + "毫秒");
Arrays.sort(array);
System.out.println("排列后:" + System.currentTimeMillis() + "毫秒");
}
}
------解决方案--------------------
就对你的代码提些建议吧
1 类名最好大写字母开始,采用 MyClassName 的样子(具体叫什么名字不记得了) 而不是像你这样的 quickSort
2 我不觉得将快排封装成一个类是明智的