一、快速排序描述:
快速排序的基本思想是:将最右端的元素作为枢纽,然后将所有元素划分为两组,然后将最右端的枢纽元素与枢纽位置上的元素替换(枢纽位置即为prititioin方法返回的位置,这样做的目的是使枢纽元素以后不需要再排序);接下来,再将这两个组最右端的元素分别作为两组的枢纽继续划分,依次类推下去,直到只剩下最后一个元素。快速排序的起始图如下所示:
二、快速排序Java语言描述:
package com.solid.sort;
public class QuickSort {
//定义数组
private int[] arr;
private static int nElems;
/**
* 构造方法
* @param maxSize
*/
public QuickSort(int maxSize) {
arr = new int[maxSize];
nElems = 0;
}
/**
* 插入元素到数组
* @param key
*/
public void insert(int key) {
arr[nElems++] = key;
}
/**
* 遍历数组元素
*/
public void display() {
for(int i=0; i<nElems; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
/**
* 调用快速排序方法
*/
public void sort() {
quickSort(0, nElems-1);
}
/**
* 快速排序
* @param left
* @param right
*/
public void quickSort(int left, int right) {
if(left >= right) {
return;
} else {
int pivot = arr[right];
int prititionIt = pritition(left, right, pivot);
quickSort(left, prititionIt-1);
quickSort(prititionIt+1, right);
}
}
/**
* 划分算法
* @return
*/
private int pritition(int left, int right, int pivot) {
int leftPtr = left - 1;
int rightPtr = right;
while(true) {
while(arr[++leftPtr] < pivot)
;
while(rightPtr > 0 && arr[--rightPtr] > pivot)
;
if(leftPtr >= rightPtr) {
break;
} else {
int temp = arr[leftPtr];
arr[leftPtr] = arr[rightPtr];
arr[rightPtr] = temp;
}
}
int temp = arr[leftPtr];
arr[leftPtr] = arr[right];
arr[right] = temp;
return leftPtr;
}
/**
* 测试main方法
* @param args
*/
public static void main(String[] args) {
QuickSort quickSort = new QuickSort(100);
for(int i=0; i<100; i++) {
int temp = (int)(Math.random()*100);
quickSort.insert(temp);
}
quickSort.display();
quickSort.sort();
quickSort.display();
}
}