package com.mc.Demo;
public class TestDemo {
/**
* 快速排序算法,将数组的第零个位置看做中轴,和最后一个比较,如果比它小交换,比它大不做处理,
* 交换后再和小的那端比,比它小不交换,比他大交换,这样循环往复,一趟排序完成,左边就是比中
* 轴小的,右边就是比中轴大的,再用分别对这两个独立数组进行排序。,
* @param args
*/
public static void main(String[] args) {
int []arr = {34,3,53,1,23,7,14,10,5};
System.out.println("heh");
TestDemo qs =new TestDemo();
qs.quick(arr);
for(int i = 0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
public void quick(int []str){
if(str.length>0){
quickSort(str,0,str.length-1);
}
}
public void quickSort(int []arr,int low,int high){
if(low <high){
int middle = getMiddle(arr, low, high);//将数组一分为二
quickSort(arr,low,middle-1);//对低字表进行递归排序
quickSort(arr,middle+1,high);//对高字表进行递归排序
}
}
public int getMiddle(int []arr,int low,int high){
int temp = arr[low];//数组的第一个数据作为中轴
while(low<high){
while(low<high&&arr[high]>temp){
high--;
}
arr[low] = arr[high];//比中轴小的值移动到低端
while(low<high&&arr[low]<temp){
low++;
}
arr[high] = arr[low];//比中轴大的移动到高端
}
arr[low] = temp;//中轴记录到尾
return low;//返回中轴的位置
}
快速排序
最新推荐文章于 2021-11-19 16:57:43 发布