快速排序:
基本思想:选择个基准数(一般是第一个元素或最后一个元素),然后以基准数分开左右边。
* 左边全部比基准数小
* 右边全部比基准数大
* 直到左右指针相等,交换下标为左右指针相等的数和基准数
* 递归重复。
/** * 快速排序 * * @author Ant * */
public class QuickSort {
/** * 基本思想:选择个基准数(一般是第一个元素或最后一个元素),然后以基准数分开左右边。 * 左边全部比基准数小 * 右边全部比基准数大 * 直到左右指针相等。交换基准数 * 递归重复。 * * @param a * @param left * @param right */
public static void quickSort(int a[], int left, int right) {
int i, j, temp;
if(left>right)
return;
i = left;
j = right;
temp = a[i];//基准数
while(i!=j){
//如果基准数在左边,就一定要从右边开始,反之一样。
while(a[j]>=temp&&i<j)
j--;
while(a[i]<=temp&&i<j)
i++;
//交换
if(i < j){
int t = a[j];
a[j] = a[i];
a[i] = t;
}
}
//i,j 指针已经相遇
//交换基准数与下标为i的数
a[left] = a[i];
a[i] = temp;
quickSort(a, left, i-1);//继续处理左边,递归过程
quickSort(a, i+1, right);//继续处理右边,递归过程
}
public static void main(String[] args) {
int a[] = { 11, 38, 24, 10, 3, 5, 18 };
QuickSort.quickSort(a, 0, a.length - 1);
for (int i = 0; i < a.length; i++) {
System.out.println(a[i] + " ");
}
}
}