- public class QuicSort {
- /**
- * 一趟快速排序的方法
- *
- * @param array
- * 所要排序的数组
- * @param h
- * 排序子列的开始位置
- * @param p
- * 排序子列的结束位置
- * @return 返回当前一趟快速排序后,比较关键字所处于的位置
- */
- private static int quickPass(int[] array, int h, int p) {
- int i = h;
- int j = p;
- int x = array[i];// 比较所用的关键字
- while (i < j) {
- while ((array[j] >= x) && (i < j))
- // 自尾端进行比较
- j--;
- if (i < j) {
- array[i] = array[j];// 将小于关键字的记录移至i所指的位置,完成第一次交换
- i++;
- // 自首端进行比较
- while ((array[i] <= x) && (i < j)) {
- i++;
- if (i < j) {
- array[j] = array[i];// 将大于关键字的记录移到j所指的位置
- j--;
- }
- }
- }
- }
- array[i] = x;// 一趟快速排序完成,将x移至正确位置
- return i;
- }
- /**
- * 对一个数组的部分进行排序,
- *
- * @param array
- * 排序的数组
- * @param s
- * 排序开始的位置
- * @param t
- * 所要排序结束的位置
- */
- public static void quickSort(int[] array, int s, int t) {
- int i = 0;
- if (s < t) {// 未做数组越界检查的代码
- i = quickPass(array, s, t);
- quickSort(array, s, i - 1);
- quickSort(array, i + 1, t);
- }
- }
- /**
- * 对一个数组进行快速排序
- *
- * @param array
- * 排序的数组
- */
- public static void quickSort(int[] array) {
- int s = 0;
- int t = array.length - 1;
- int i = 0;
- if (s < t) {
- i = quickPass(array, s, t);
- quickSort(array, s, i - 1);
- quickSort(array, i + 1, t);
- }
- }
- /**
- * 输出排好序的数组
- *
- * @param array
- */
- private static void printArray(int[] array) {
- System.out.print("排过序的数组:");
- for (int a : array) {
- System.out.print(a + " ");
- }
- System.out.println("");
- }
- public static void main(String[] args) {
- int[] array1 = { 4, 1, 6, 3, 2, 9, 7 };
- quickSort(array1);// 此方法对一个数组使用快速排序法做升序排序
- System.out.println("对整个数组排序");
- printArray(array1);
- int[] array2 = { 4, 1, 6, 3, 2, 9, 7 };
- // 此方法,提供了对数组部分元素的进行排序的功能,比如,只排序数组中的前五位:
- quickSort(array2, 0, 4);
- System.out.println("仅对数组中前五位元素进行排序");
- printArray(array2);
- }
- }
复制代码 |