快速排序算法是一种比较重要的算法,他可以在O(n)时间复杂度内对一个数组进行排序。
因此掌握快速排序算法是编程者的一项必要机能。
以外大多数的快速排序算法都是有C或者C++实现的。
本文给大家提供一个Java实现快速排序算法的例子。
package com.test;
import java.util.Random;
public class QuickSort {
public int data[];
/**交换数组中两个数的位置
* @param start
* @param des
*/
private void Swap(int start,int des){
int temp;
temp = data[des];
data[des]=data[start];
data[start]= temp;
}
/**从数组中随机抽取一个数,然后把小于这个数的数字放到左边,把大于这个数的数字放到右边,实现一次排序。
* @param length
* @param start
* @param end
* @return
*/
private int Partition(int length,int start,int end){
int small = 0;
int index = 0;
try {
if(data == null || length < 0 || start < 0 || end - start > length){
throw new Exception("Invalid Parameter");
}
//获取随机数
Random ra = new Random();
index = start + (int)ra.nextInt(end - start);
//交换两个数的位置
Swap(index,end);
small=start-1;
//循环数组把小于随机数的数字放到左边,大于随机数的数字放到右边
for(index = start;index < end;++index){
if(data[index] < data[end]){
++ small;
if(small != index){
Swap(index,small);
}
}
}
++small;
Swap(end,small);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("index:" + index + "small:" + small + "end:" + end);
}
return small;
}
/**采用递归的方式实现快速排序算法
* @param length
* @param start
* @param end
*/
public void QuickSortImp(int length,int start,int end){
if(start >= end )
return;
int index = Partition(length,start,end);
if(index > start){
QuickSortImp(length,start,index -1);
}
if(end > index){
QuickSortImp(length,index + 1,end);
}
}
}