简单原理:
快速排序是对冒泡排序的改进,用分而治之的思想,先找到一个基准数,利用基准数进行一轮排序,将所有比它小的数都放在左边,再将所有比它大的数都放在它右边,
然后返回基准数的位置,进行下一轮排序,下一轮将分别对基准数左右两边进行排序,依次循环,直到最后排序完成。
代码实现:
import org.codewy.util.PrintUtil; /** * 快速排序 */ public class QuickSort { public static void qiuckSort(int[] source, int i, int j) { int point; if (i < j) { point = partition(source, i, j); qiuckSort(source, i, point - 1); qiuckSort(source, point + 1, j); } } private static int partition(int[] source, int i, int j) { //将第一个值设为基准数 int pointVal = source[i]; while (i < j ) { //从右边开始找到第一个比基准值小的数val1 while (i < j && source[j] >= pointVal) { j--; } //将找到的数与放到基准数的位置 if (i < j) { source[i++] = source[j]; } //从左边开始找到第一个比基准数大的数 while (i < j && source[i] <= pointVal) { i++; } //将找到的数放到上一步找到的val1之前的位置 if (i < j) { source[j--] = source[i]; } } //将基准数放到数组中,它左边的数都比他小,右边的数都比他大 source[i] = pointVal; //返回下一次循环的分界点 PrintUtil.printIntArr(source);//打印每轮排序完后的状态 return i; } public static void main(String[] args) { int[] source = new int[]{5, 4, 8, 1, 2, 6, 9, 7, 3}; qiuckSort(source, 0, source.length-1); PrintUtil.printIntArr(source); } }
输出结果: