选择一个基准元素,通常选择第一个元素或者最后一个元素,通过一趟排序讲待排序的记录分割成独立的两部分,其中一部分记录的元素值均比基准元素值小。另一部分记录的 元素值比基准值大。此时基准元素在其排好序后的正确位置。然后分别对这两部分记录用同样的方法继续进行排序,直到整个序列有序。
快速排序代码:
package QuckSort;
/**
* Created by root on 3/9/16.
*/
public class QuickSort<T extends Comparable<T>> {
private T sort[];
private int length;
public QuickSort(T... sort){
this.sort = sort;
length = sort.length;
}
/**
* 排序方法,调用方法 quickSort(int low,int high) 实现快速排序
*/
public void sort(){
if(length == 0){
throw new RuntimeException("您没有传入任何参数!");
}else {
quickSort(0,length-1);
}
}
/**
* 先将数组进行分割,然后运用递归实现每部分的快速排序。每组将比基准元素小的数放在左边,比基准元素大的放在右边。
* @param left 低位置下标
* @param right 高位置下标
*/
private void quickSort(int left,int right){
if(left < right){
T standard = sort[left];
int low = left,high = right;
while (low < high){
while(low < high && (standard.compareTo(sort[high]) <= 0)){
high --;
}
sort[low] = sort[high];
while(low < high && (standard.compareTo(sort[low]) >= 0)){
low ++;
}
sort[high] = sort[low];
}
sort[low] = standard;
quickSort(left,low-1);
quickSort(low+1,right);
}
}
/**
* 打印所有传入的参数
*/
public void display(){
if(length == 0){
throw new RuntimeException("您没有传入任何参数!");
}else{
for(T t:sort){
System.out.print(t+"\t");
}
}
}
}
测试代码:
package QuckSort;
/**
* Created by root on 3/9/16.
*/
public class TestQuickSort {
public static void main(String[] args) {
QuickSort<Integer> quickSort = new QuickSort<Integer>(90,23,56,34,46,1);
System.out.println("before sort:");
quickSort.display();
quickSort.sort();
System.out.println("\nafter sort:");
quickSort.display();
}
}
运行结果: