Java快速排序实现

快速排序

用某种排序方法对关键字序列 (25,84,21,47,15,27,68,35,20) 进行排序,序列的变化情况采样如下:

15 20 21 25 47 27 68 35 84
15 20 21 25 47 27 68 35 84
15 20 21 25 47 27 68 35 84
15 20 21 25 35 27 47 68 84
15 20 21 25 27 35 47 68 84
15 20 21 25 27 35 47 68 84

请编程实现该算法

观察发现,这个排序算法是快速排序算法。

我的实现如下(还原依次打印输出的过程):

import java.util.Arrays;

public class MyQuickSort {

    public static void quickSort(int[] arr, int left, int right) {
        if (left >= right) return;
        // int temp = arr[left];
        int i = left, j = right;
        while(i < j) {
            while (j > i && arr[j] >= arr[left]) {
                j--;
            }
            while (i < j && arr[i] <= arr[left]) {
                i++;
            }
            if (i < j) {
                swap(arr, i, j);
            }
        }
        swap(arr,left,i);
        printArr(arr);
        quickSort(arr,left,i-1);
        quickSort(arr,i+1,right);
    }

    public static void swap(int[] arr, int i, int j) {
        int tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }

    public static void printArr(int[] arr) {
        for(int i = 0; i < arr.length; i++) {
            if(i < arr.length-1) {
                System.out.print(arr[i] + " ");
            }else {
                System.out.println(arr[i]);
            }
        }
    }

    public static void main(String[] args) {
        int[] arr = {25, 84, 21, 47, 15, 27, 68, 35, 20};
        quickSort(arr,0,8);
    }
}

实际输出

15 20 21 25 47 27 68 35 84
15 20 21 25 47 27 68 35 84
15 20 21 25 47 27 68 35 84
15 20 21 25 35 27 47 68 84
15 20 21 25 27 35 47 68 84
15 20 21 25 27 35 47 68 84

你可能感兴趣的:(算法)