基本思想
快排的核心就是递归,递归就是调用方法本身从而循环目的。
通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
步骤
快速排序使用分治法来把一个串(名单)分为两个子串(子列表)具体算法描述如下:
1.会把数组当中的一个数当成基准数
2.一般会把数组中最左边的数当成基准数,然后丛两边进行检索。丛右边检索比基准数小的,然后左边检索比基准数大的。如果检索到了,就停下,然后交换这两个元素,
然后继续检索,
一旦相遇,就停止检索 。 把基准数和相遇位置为树进行交换
3.以当前左右指针相交处为基准,拆分数组
重复步骤2
左边继续检索,右边再次拆分
右边继续检索
拆分结果
数据排序完毕
代码实现
package com.qcby; import java.util.Arrays; public class QuickSort { //快排 public static void main(String[] args) { // TODO Auto-generated method stub int[] arr = { 5, 2, 8, 3, 9, 1, 0, 23 }; sort(arr, 0, arr.length-1); System.out.println(Arrays.toString(arr)); } public static void sort(int[] arr, int left, int right) { if (left >= right) { return; } int base=arr[left]; int i=left; int j=right; while(i!=j) { while(arr[j]>=base&&i<j) { j--; } while(arr[i]<=base&&i<j) { i++; } int temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } arr[left]=arr[i]; arr[i]=base; sort(arr, left, i-1); sort(arr, i+1, right); } }