快速排序
快速排序用到了一个分支的思想,首先选取一个基数,然后调整数组,分成两个子区间,左边的子区间小于等于基数,右边的子区间大于等于基数。然后递归地对两个子区间进行排序。
import com.sun.org.apache.bcel.internal.generic.FSUB; import org.junit.Test; import java.util.Arrays; public class QuickSort { public void swap(int[] array, int a, int b) { int tmp = array[a]; array[a] = array[b]; array[b] = tmp; }
private void SubSort(int[] arr, int start, int end) {
if (start < end) { // start == end时不用排序
int base = arr[start]; // 基准
System.out.println("选取的base为:" + base);
int left = start; // 开,left的值一定在start右边,注意后面使用的++left
int right = end + 1; // 开,right的值一定在end+1左边,注意后面使用的--right
while (true) {
while (left < end && arr[++left] <= base) ; // 从左往右,找到第一个大于base的位置
while (right > start && arr[--right] >= base) ; // 从右往左,找到第一个小于base的位置
if (left < right) swap(arr, left, right);
else break;
}
swap(arr, start, right);
// 递归
SubSort(arr, start, right-1);
SubSort(arr, right+1, end);
}
}
public void QuickSort(int[] arr) {
if (arr == null || arr.length == 0) {
System.out.println("Null or Empty array");
return;
}
SubSort(arr, 0, arr.length - 1); // 分治
}
@Test public void testQuickSort() {
int[] arr = {9,9,-1,-2,-1,5};
System.out.println("排序前:" + Arrays.toString(arr));
QuickSort(arr);
System.out.println("排序后:" + Arrays.toString(arr));
}
}
作者:Ryanjie
出处:http://www.cnblogs.com/ryanjan/
本文版权归作者和博客园所有,欢迎转载。转载请在留言板处留言给我,且在文章标明原文链接,谢谢!
如果您觉得本篇博文对您有所收获,觉得我还算用心,请点击右下角的 [推荐],谢谢!