您的位置:首页 > 职场人生

黑马程序员-java之快速排序的实现

2015-08-19 16:19 483 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

当然,现在java已经不用自己实现排序了。但是我觉得排序算法还是比较有意思的。在这里实现一下快速排序。

public class Paixu {
public static void main(String[] args) {
int[] arr=productArray();                     //获得一个由10个随机数组成的数组
 
System.out.print("排序前: [ ");          //打印显示 排序前的数组
for(int i=0;i<arr.length;i++){
if(i==arr.length-1){
System.out.println(arr[i]+" ]");
break;
}
System.out.print(arr[i]+", ");
}
 
 
quick(arr);
//对数组进行排序

System.out.print("排序后: [ ");        //打印显示   排序后的数组
for(int i=0;i<arr.length;i++){
if(i==arr.length-1){
System.out.println(arr[i]+" ]");
break;
}
System.out.print(arr[i]+ ", ");
}
}

public static int[] productArray(){
//产生一个由10个随机数 组成的数组
int x=(int)(Math.random()*100+1);
//产生一个1~100之间的随机数
int[] array=new int[10];
//定义一个容量为10的空数组
for(int i=0;i<10;i++){
//循环产生随机数,并将其赋值给数组的每个元素
array[i]=x;
x=(int)(Math.random()*100+1);
}
return array;
}

public static  int  getMiddle(int[] arr,int low,int high){
//获得枢轴值的最终位置
int pivot=arr[low];           //将第一个元素设为枢轴值,对数组进行划分
while(low<high){
//循环跳出条件
while(low<high && arr[high]>=pivot)
--high;
arr[low]=arr[high];   //将比枢轴值小的元素移到左边
while(low<high && arr[low]<=pivot)
++low;
arr[high]=arr[low];     //将比枢轴值大的元素移到右边
}
arr[low]=pivot;
return low;
}

public  static void quickSort(int[] arr,int low,int high){
//递归调用getMiddle
if(low<high){
int middle=getMiddle(arr,low,high);

quickSort(arr,low,middle-1);
//对左侧数组进行递归
quickSort(arr,middle+1,high);
//对右侧数组进行递归
}
}

public static void quick(int[] arr){
//调用quickSort()实现数组的快速排序
if(arr.length>0){
quickSort(arr,0,arr.length-1);
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java