快速排序算法 java实现
首先说下思路:设置两个指针:head和tail,分别指向第一个和最后一个元素,head像后移动,tail向前移动,选第一个数为标准key。先从后面开始,找到第一个比标准小的数,互换位置,然后再从前面,找到第一个比标准大的数,互换位置,第一趟的结果就是标准左边的都小于标准,右边的都大于标准(但不一定有序),分成左右两拨后,继续递归的使用上述方法,最终有序!
下面来看代码实现:
package com.sun.sort;
import java.util.Arrays;
/**
*
* @author:孙创
* @date:2017年2月21日
* @Discription:快速排序法的实现
*/
public class MyQuickSort {
public static void main(String[] args) {
MyQuickSort q = new MyQuickSort();
int[] arr = { 1, 4, 3, 3, 8, 10, 2, 4 };
q.QuickSort(arr, 0, arr.length - 1);
String string = Arrays.toString(arr);
System.out.println(string);
}
public void QuickSort(int[] arr, int head, int tail) {
// 递归结束的条件
if (head >= tail) {
return;
}
int left = head;
int right = tail;
boolean flag = true;// 设置顺序为从后向前,如果为false则为从前到后
int key = arr[left];
while (left < right) {
if (flag) {
if (arr[right] < key) {
change(arr, left, right);
flag = false;
} else {
right--;
}
} else {
if (arr[left] > key) {
change(arr, left, right);
flag = true;
} else {
left++;
}
}
}
// 此时left=right
QuickSort(arr, head, left - 1);
QuickSort(arr, left + 1, tail);
}
// a,b数组元素互换
private void change(int[] arr, int a, int b) {
int tmp = arr[a];
arr[a] = arr[b];
arr[b] = tmp;
}
}