基本思想:
将待排记录分割成独立的两部分,其中第一部分记录的关键字总比第二部分记录的关键字小,再缩小范围对每一部分进行快排,直到原记录为有序序列
实例过程演示:temp=a[low]=17
17 23 16 3 25 12 40 34 28 9 54 45 21
low high
17 23 16 3 25 12 40 34 28 9 54 45 21
low high
17 23 16 3 25 12 40 34 28 9 54 45 21
low high
9 23 16 3 25 12 40 34 28 54 45 21
low high
9 23 16 3 25 12 40 34 28 54 45 21
low high
9 16 3 25 12 40 34 28 23 54 45 21
low high
9 16 3 25 12 40 34 28 23 54 45 21
low high
9 16 3 25 12 40 34 28 23 54 45 21
low high
9 16 3 25 12 40 34 28 23 54 45 21
low high
9 12 16 3 25 40 34 28 23 54 45 21
low high
9 12 16 3 25 40 34 28 23 54 45 21
low high
9 12 16 3 25 40 34 28 23 54 45 21
low high
9 12 16 3 25 40 34 28 23 54 45 21
low high
第一趟快排结果:
9 12 16 3 17 25 40 34 28 23 54 45 21
Java代码实现:
package com.yrf.myjava.ch00;
import java.util.*;
public class QuickSort {
public static int quicksort(int []a,int low,int high) {
int temp=a[low];
while(low<high) {
while(low<high&&temp<=a[high])
high--;
a[low]=a[high];
while(low<high&&temp>=a[low])
low++;
a[high]=a[low];
}
a[low]=temp;
return low;
}
public static void Quicksort(int []a,int low,int high) {
int key=0;
if(low<high) {
key=quicksort(a,low,high);
Quicksort(a,low,key-1);
Quicksort(a,key+1,high);
}
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int []a=new int[n];
for(int i=0;i<a.length;i++)
a[i]=sc.nextInt();
for(int i=0;i<a.length;i++)
System.out.print(a[i]+" ");
System.out.println();
Quicksort(a,0,n-1);
for(int i=0;i<a.length;i++)
System.out.print(a[i]+" ");
System.out.println();
sc.close();
}
}