Java Data Structures and Algorithms - Quick Sort

1. About Quicksort

Quicksort is an improvement on bubble sort. The basic idea is to divide the data to be sorted into two independent parts by one sorting, and all the data in one part is smaller than all the data in the other part, and then quickly sort the two parts of the data according to this method. The entire sorting process can be performed recursively, so that the entire data becomes an ordered sequence.


2. Code Case

package com.szh.sort;

import java.util.Arrays;

/**
 *
 */
public class QuickSort {

    private static void quickSort(int[] arr, int left, int right) {
        int l = left;  //左下标
        int r = right; //右下标
        int middle = arr[(left + right) / 2]; //以数组的中间元素为基准
        int temp = 0; //临时变量,作为交换元素时使用

        //while循环的目的是让比middle值小放到左边,比middle值大放到右边
        while (l < r) {
            //在middle的左边一直找,直到找到大于等于middle的值,循环才结束
            while (arr[l] < middle) {
                l++;
            }
            //在middle的右边一直找,直到找到小于等于middle的值,循环才结束
            while (arr[r] > middle) {
                r--;
            }
            //如果 l >= r,说明middle左边的值全都是小于等于它的,右边的值全都是大于等于它的
            //也可能middle的左边没有值,右边全都是大于等于它的
            //也可能middle的右边没有值,左边全都是小于等于它的
            if (l >= r) {
                break;
            }

            //进行元素交换
            temp = arr[l];
            arr[l] = arr[r];
            arr[r] = temp;

            //交换完成之后,如果arr[l]==middle,则需要让右下标向前移动一位
            if (arr[l] == middle) {
                r--;
            }
            //交换完成之后,如果arr[r]==middle,则需要让左下标向后移动一位
            if (arr[r] == middle) {
                l++;
            }
        }
        //如果此时 l == r,必须执行如下操作,否则会出现栈溢出
        if (l == r) {
            l++;
            r--;
        }
        //向左递归
        if (left < r) {
            quickSort(arr, left, r);
        }
        //向右递归
        if (right > l) {
            quickSort(arr, l, right);
        }
    }

    public static void main(String[] args) {
        int[] arr = {-9, 78, 0, 23, -567, 70, -1, 900, 4561};

        System.out.println("排序前:");
        System.out.println(Arrays.toString(arr));

        //测试快速排序
        quickSort(arr, 0, arr.length - 1);

        System.out.println("排序后:");
        System.out.println(Arrays.toString(arr));
    }
}


3. Comparison of various sorting algorithms

Guess you like

Origin blog.csdn.net/weixin_43823808/article/details/123529640