(十六)高级排序—快速排序

本文详细介绍了快速排序算法的原理及其实现过程,通过Java语言实现快速排序,并提供了完整的代码示例。快速排序是一种高效的排序方法,采用分治策略来把一个序列分为较小和较大的两个子序列。

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

一、快速排序描述:

快速排序的基本思想是:将最右端的元素作为枢纽,然后将所有元素划分为两组,然后将最右端的枢纽元素与枢纽位置上的元素替换(枢纽位置即为prititioin方法返回的位置,这样做的目的是使枢纽元素以后不需要再排序);接下来,再将这两个组最右端的元素分别作为两组的枢纽继续划分,依次类推下去,直到只剩下最后一个元素。快速排序的起始图如下所示:

快速排序

二、快速排序Java语言描述:

package com.solid.sort;

public class QuickSort {

    //定义数组

    private int[] arr;

    private static int nElems;

   

    /**

     * 构造方法

     * @param maxSize

     */

    public QuickSort(int maxSize) {

       arr = new int[maxSize];

       nElems = 0;

    }

   

    /**

     * 插入元素到数组

     * @param key

     */

    public void insert(int key) {

       arr[nElems++] = key;

    }

   

    /**

     * 遍历数组元素

     */

    public void display() {

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

           System.out.print(arr[i] + " ");

       }

       System.out.println();

    }

   

    /**

     * 调用快速排序方法

     */

    public void sort() {

       quickSort(0, nElems-1);

    }

   

    /**

     * 快速排序

     * @param left

     * @param right

     */

    public void quickSort(int left, int right) {

       if(left >= right) {

           return;

       } else {

           int pivot = arr[right];

           int prititionIt = pritition(left, right, pivot);

           quickSort(left, prititionIt-1);

           quickSort(prititionIt+1, right);

       }

    }

   

    /**

     * 划分算法

     * @return

     */

    private int pritition(int left, int right, int pivot) {

       int leftPtr = left - 1;

       int rightPtr = right;

       while(true) {

           while(arr[++leftPtr] < pivot)

              ;

           while(rightPtr > 0 && arr[--rightPtr] > pivot)

              ;

           if(leftPtr >= rightPtr) {

              break;

           } else {

              int temp = arr[leftPtr];

              arr[leftPtr] = arr[rightPtr];

              arr[rightPtr] = temp;

           }

       }

       int temp = arr[leftPtr];

       arr[leftPtr] = arr[right];

       arr[right] = temp;

       return leftPtr;

    }  

   

    /**

     * 测试main方法

     * @param args

     */

    public static void main(String[] args) {

       QuickSort quickSort = new QuickSort(100);

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

           int temp = (int)(Math.random()*100);

           quickSort.insert(temp);

       }

       quickSort.display();

       quickSort.sort();

       quickSort.display();

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值