sort-快速排序法、

来源:互联网 发布:mac ati显卡驱动 编辑:程序博客网 时间:2024/05/16 07:16
package Sort;


import java.util.Random;


/**

*快速排序法、 

**/




public class QuickSort {


//形参: 整形数组、数组左边界、数组右边界、数组大小、
public int[] quickSort(int[]a, int i, int j, int length) {
int pos;//划分后的基准记录的位置、
if(i<j)//左边界小于右边界、这样数组的值才大于一、这样才需要排序、
{
pos = partition(a,i,j,length);//对i、j的划分、
quickSort(a,i,pos-1,length);//对左区间的递归排序、
quickSort(a,pos+1,j,length);//对右区间的递归排序、
}
else 
{
System.out.println("排序结束、、、" + i+" "+j);
}
return a;
}



private int partition(int[] a, int i, int j, int length) {
int m = a[i];//用区间的第一个记录作为基准、
while(i<j){//从区间两端向中间扫面、直到i=j为止、
//从右向左扫描、查找第一个关键字小于m的记录a[j]、找到后推出循环、
while(i<j && a[j] >= m){
j--;
}
if(i<j){//表示找到第一个小于m的记录
a[i++] = a[j];
}
//从左向右扫描、查找第一个关键字大于m的记录a[i]、找到后推出循环、
while(i<j && a[i] <= m){
i++;
}
if(i<j){//表示找到了a[i],a[i]>m
a[j]=a[i];//相当于交换a[i]跟a[j]、交换后j的指针减一、
j--;
}
}
a[i] = m;//基准记录已被最后定位、
System.out.println(" m " + m);
for(int k = 0; k < length; k++){
System.out.print(a[k] + " ");
}
System.out.println("");
return i;
}

int a[] = new int[10000];
Random ran = new Random();
for(int i=0;i<9999;i++){
a[i] = ran.nextInt(10000);
if(i % 100==0)
System.out.println("");
System.out.print(a[i] + " ");
}
long starttime = System.currentTimeMillis();

QuickSort qs = new QuickSort();
qs.quickSort(a,0,a.length-1,a.length);


long endtime = System.currentTimeMillis();
System.out.println("排序共花费"+(endtime-starttime)+"毫秒");
}
}
原创粉丝点击