快速排序

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] + " ");
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值