快速排序

来源:互联网 发布:索尼电视型号推荐知乎 编辑:程序博客网 时间:2024/05/17 06:50
package com.ykp.test;/** * 快速排序:快速排序采用的思想是分治思想。 *  * 快速排序是找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 * 都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他n-1个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正 * 确位置,排序完成。所以快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归。 */public class QuickSortTest {    public static void quicksort(int[] arr, int left, int right) {        if (left < right) {            int low = left;// 低指针            int high = right;// 高指针            int key = arr[low];// 基准的值            // 如果低指针的值不小于高指针的值的时候,结束本次排序            while (low < high) {                // 首先扫描高指针,从右向左扫描,在low < high的前提下,                // 如果遇到比基准key小的值,则停止扫描,并且把这个小的值放到low所在的位置                while (low < high && arr[high] >= key) {                    high--;                }                // 把右边比基准小的放到左边                arr[low] = arr[high];                // 然后扫描低指针,从左向右扫描,在low < high的前提下,                // 如果遇到比基准key大的值,则停止扫描,并且把这个大的值放到high所在的位置                while (low < high && arr[low] <= key) {                    low++;                }                // 把左边比基准大的放到右边                arr[high] = arr[low];            }            // 把基准的值放到中间的位置            arr[low] = key;            // 对左侧进行再次排序            quicksort(arr, left, low - 1);            // 对右侧再次进行排序            quicksort(arr, low + 1, right);        }    }    public static void main(String[] args) {        int arr[] = { 22, 56, 54, 1, 98, 9, 22, 26 };        quicksort(arr, 0, arr.length - 1);        for (int i = 0; i < arr.length; i++) {            System.out.print(arr[i] + " ");        }    }}
0 0
原创粉丝点击