一、快排思路
对于给定的数组,从中选一个元素为比较对象,一般选最左或最右的元素,选左边为升序排,选右边反之。
数组array[]:
最左边:target = 5
数组下标:i = 0, j = 9
步骤:
①从右边遍历数组,把array[ j ]比5小的放在5的左边, j--;
交换位置后i = 0,j = 7:
②从左边遍历数组,把array[ i ]比5大的放在5的右边, i++;
交换位置后i = 5,j = 7:
③回到①②步骤循环执行:
循环执行后,比5小的都放在了5的左边,比5大的都放在了5的右边;
④此时5左边和右边部分还是乱序的,这就需要做递归操作,把0 2 3 1 4和 7 8 6 9 部分继续执行述排序步骤。
递归执行后:
二、快速排序java实现
代码:
package com.ansel.personal.util; /** * Created by ansel on 2017/12/28. */ public class SortUtil{ public static void quickSort(int[] array, int start, int end) { int i = start, j = end; int target = array[start]; while (i < j) { while (i < j && target <= array[j]) j--; if (i < j) { int temp = array[j]; array[j] = array[i]; array[i] = temp; } while (i < j && array[i] <= target) i++; if (i < j) { int temp = array[j]; array[j] = array[i]; array[i] = temp; } } if (i - 1 > start){ quickSort(array, start, i - 1); } if (j + 1 < end){ quickSort(array,j + 1, end); } } public static void main(String[] args) { int [] array = {5,2,3,1,6,4,7,8,0,9}; SortUtil.quickSort(array,0,array.length - 1); for (int i = 0; i < array.length;i++) System.out.print(array[i] + " "); } }执行结果:
Copyright © 2018 Ansel. All rights reserved.