十七、快速排序

一、快速排序法的介绍

快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两 部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排 序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

二、快速排序示意图

在这里插入图片描述

三、快速排序的应用实例

要求: 对 [-9,78,0,23,-567,70] 进行从小到大的排序,要求使用快速排序法。

  1. 如果取消左右递归,结果是 -9 -567 0 23 78 70

  2. 如果取消右递归,结果是 -567 -9 0 23 78 70

  3. 如果取消左递归,结果是 -9 -567 0 23 70 7

四、快速排序代码实现(我使用的是用第一个元素作为中轴)

package cn.zzw.algorithm.sort1;

import java.util.Arrays;

public class QuickSort {

    public static void main(String[] args) {
        int[] array={4,3,2,4,10,12,1,5,6};
        QuickSort(array,0,array.length-1);
        System.out.println(Arrays.toString(array));
    }

    public static int Portition(int array[],int low,int high)
    {
        int pivot=array[low];
        while (low<high)
        {
            while (low < high && pivot <= array[high]) {
                high--;
            }
            //退出循环时,说明找到一个pivot>array[high]
            array[low] = array[high];
            while (low < high && pivot >= array[low]) {
                low++;
            }
            //退出循环时,说明找到一个pivot<array[low]
            array[high] = array[low];
        }
        //最后循环退出循环时,说明low已经等于high
        array[low]=pivot;
        return low;
        //当然此处也可以写成
        //array[high]=pivot;
        //return high;
    }

    public static void QuickSort(int array[],int low,int high)
    {
        if(low<high)
        {
            int pos=Portition(array,low,high);
            QuickSort(array,low,pos-1);
            QuickSort(array,pos+1,high);
        }
    }
}

测试结果(测试八百万个数据大概需要三秒):

[1, 2, 3, 4, 4, 5, 6, 10, 12]

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值