纸上得来终觉浅,绝知此事要躬行。
学了很久了,有点不记得了,还是要敲一敲,加深记忆。
快速排序是不稳定的。
package com.czw.acm.code;
public class QuickSort {
/**
* 快速排序
*
* @param a
* 被排序数组
* @param left
* 起始位置
* @param right
* 结束位置
*/
public void quickSort(int[] a, int left, int right) {
//如果輸入的起始位置>=結束位置説明排序已經完成,返回
if (left >= right)
return;
int i = left;
int j = right;
//默认以最左边的数为轴,把比轴小的数放在轴的左边,比轴大的数放在右边。
int tmp = a[left];
//每层排序,完成把比轴小的放左边,比轴大的放在右边
//在排序是必须要从右边开始
while (i < j) {
//从右边开始找到一个比轴小的数
while (i < j && a[j] >= tmp) {
j--;
}
//放到a[i]的位置
a[i] = a[j];
//从左边开始找一个比轴大的数
while (i < j && a[i] < tmp) {
i++;
}
//放到a[j]的位置
a[j] = a[i];
}
//把轴的值放回数组
a[i] = tmp;
//对轴两边的数组进行排序
quickSort(a, left, i - 1);
quickSort(a, i + 1, right);
}
public static void main(String[] args) {
int a[] = { 1, 2, 5, 41, 23, 15, 65, 87, 156, 2, 15, 94 };
QuickSort q = new QuickSort();
q.quickSort(a, 0, a.length - 1);
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
}
}