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

来源:互联网 发布:淘宝手机写试用报告 编辑:程序博客网 时间:2024/06/06 00:56

------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);
}
}
}

0 0
原创粉丝点击