package introjava;
public class QuickSort2 {
/**
* description : 快速排序
* @autor
kwzhang
* modify :2012-6-20
*
* @param pData
*
@param left
* @param right
* @return
*/
public
static void quickSort(int [] list)
{
quickSort(list, 0,
list.length - 1);
}
static void quickSort(int n[], int left, int
right) {
int dp;
if (left <
right) {
dp = partition(n,
left, right);
quickSort(n,
left, dp - 1);
quickSort(n,
dp + 1, right);
}
}
static int
partition(int n[], int left, int right) {
int
pivot = n[left];
while (left < right) {
while (left < right &&
n[right] >= pivot) //元素比pivot大继续,小就停
right--;
if (left < right)
n[left++] =
n[right]; //将n[left]赋值为n[right],n[left]已经存在pivot里,然后left自增
while (left < right && n[left] <=
pivot) //元素比pivot小继续,大就停
left++;
if
(left <
right) //将n[right]赋值为n[left],这样完成n[left]和n[right]的交换,然后各自自增或自减,并返回当做下轮的pivot位置。
n[right--] = n[left];
}
n[left] =
pivot; //改成n[right] = pivot;结果也是对的
return
right; //改成left也是对的
}
public static void main(String []args){
int [] list = {1,2,3,4,5,6};
// int [] list = {5, 2,
9, 3, 8, 4, 5, 5, 0, 1, 6, 7};
for(int i = 0; i <
list.length; i++)
System.out.print(list[i] + " ");
System.out.print("\n");
quickSort(list);
for(int i = 0; i <
list.length; i++)
System.out.print(list[i] + " ");
}
}
原文:http://www.cnblogs.com/hansonzhe/p/3595186.html