快速排序

本文详细介绍了快速排序算法的基本思想和实现过程。快速排序是一种高效的排序算法,通过递归地将数组分成两部分并分别排序来完成整个数组的排序。文章提供了具体的代码实现,并展示了算法的实际运行效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

快速排序

1.      快速排序的思想:

通过将一个数组划分为两个字数组,然后通过递归调用自身为每个字数组进行快速排序来实现。

2.      如何进行划分:

设定关键字,将比关键字小的数据放在一组,比关键字大的放在另一组。

3.      如何自动设定关键字:

设置数组最右端的数据为关键字。

快速排序的实现:

/*

 * 快速排序

 */

public classQuickSort {

 

    /**

     * 划分数组

     */

    public static int partition(long arr[],int left, int right,long point) {

        int leftPtr = left - 1;

        int rightPtr = right;

        while(true) {

            //循环,将比关键字小的留在左端

            while(leftPtr < rightPtr&& arr[++leftPtr] < point);

            //循环,将比关键字大的留在右端

            while(rightPtr > leftPtr&& arr[--rightPtr] > point);

            if(leftPtr >= rightPtr){

                break;

            }else{

                long tmp = arr[leftPtr];

                arr[leftPtr]=  arr[rightPtr];

                arr[rightPtr]= tmp;

            }

        }

        //将关键字和当前leftPtr所指的这一个进行交换

        long tmp = arr[leftPtr];

        arr[leftPtr]=  arr[right];

        arr[right]= tmp;

        return leftPtr;

    }

   

    public static void displayArr(long[] arr) {

        System.out.print("[");

        for(long num : arr) {

            System.out.print(num + " ");

        }

        System.out.print("]");

        System.out.println();

    }

   

    public static void sort(long[] arr, int left, int right) {

        if(right - left <= 0) {

            return;

        }else{

            //设置关键字

            long point = arr[right];

            //获得切入点,同时对数组进行划分

            int partition = partition(arr,left, right, point);

            //对左边的子数组进行快速排序

            sort(arr,left,partition- 1);

            //对右边的子数组进行快速排序

            sort(arr,partition+ 1, right);

        }

    }

}

public classTestQuickSort {

    public static void main(String[] args) {

        long[] arr  = new long[10];

        for(int i = 0; i < 10;i++) {

            arr[i]= (long)(Math.random() * 99);

        }

       

        QuickSort.displayArr(arr);

       

        QuickSort.sort(arr,0, arr.length- 1);

       

        QuickSort.displayArr(arr);

    }

}

运行结果:

[7 63 40 63 9 71 61 26 9 21 ]

[7 9 9 21 26 40 61 63 63 71 ]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值