好久没写过快排了,今天温习一下,以自己模糊的印象写一个快排。
只是简单实现了,并没有考虑到快排的优化。
package com.quaint.test01;
import java.util.Arrays;
/**
* 快速排序
* @author dell
*
*/
public class QuickSort {
public static void main(String[] args) {
int arr[]= {5,1,7,6,2,4,8,3,12,78,22,44,11,5};
sort(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
public static void sort(int arr[],int low,int high){
int left=low; //记下传进来的左下标
int right = high; //记下传进来的右下标
int temp,sign; //定义交换变量和标识
if(high-low<=0) { //递归结束条件
return;
}
sign=low; //初始sign指向第一位
while(low<high) {
if(sign==low) { //如果判断是否发生了交换
if(arr[sign]>arr[high]) {
temp=arr[sign];
arr[sign]=arr[high];
arr[high]=temp;
sign=high;
low++;
}else {
high--;
}
}else {
if(arr[sign]<arr[low]) {
temp=arr[sign];
arr[sign]=arr[low];
arr[low]=temp;
sign=low;
high--;
}else {
low++;
}
}
}
sort(arr,left,sign-1);//递归左侧数组
sort(arr,sign+1,right);//递归右侧数组
}
}
输出结果为:
[1, 2, 3, 4, 5, 5, 6, 7, 8, 11, 12, 22, 44, 78]