您当前的位置: 首页 >  Java

小志的博客

暂无认证

  • 0浏览

    0关注

    1217博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

java数据结构和算法——快速排序算法

小志的博客 发布时间:2020-08-10 22:19:51 ,浏览量:0

目录
    • 一、快速排序算法介绍
    • 二、快速排序算法示意图
    • 三、快速排序算法的应用实例需求
    • 四、快速排序算法示例
    • 五、测试快速排序算法所消耗的时间示例

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

在这里插入图片描述

三、快速排序算法的应用实例需求

对 [-9,78,0,23,-567,70] 进行从小到大的排序,要求使用快速排序法。并测试测试1000万条数据排序耗时。

四、快速排序算法示例

1、代码

package com.rf.springboot01.dataStructure.sort;

import java.util.Arrays;

/**
 * @description: 快速排序示例
 * @author: xiaozhi
 * @create: 2020-08-10 21:20
 */
public class QuickSort {
    public static void main(String[] args) {
        int[] arr = {-9,78,0,23,-567,70};
        quickSort(arr,0,arr.length-1);
        System.out.println(Arrays.toString(arr));
    }
    /** 
    * @Description:  快速排序方法
    * @Param: [arr] 
    * @Author: xz  
    * @return: void
    * @Date: 2020/8/10 21:21  
    */ 
    public static void quickSort(int[] arr,int left ,int right){
        int l =left;//左下标
        int r=right;//右下标
        int middle=arr[(left+right)/2];//中轴值
        int temp=0;//定义一个临时变量
        //while循环目的:比middle小的值让左边,比middle大的值放右边
        while(l=中轴值middle才退出
            while(arr[l]= 右边下标(r),说明中轴值middle的左右俩边的值已经按照
            //左边全部都是 = middle的值
            if(l >= r){
                break;
            }
            //交换
            temp=arr[l];
            arr[l]=arr[r];
            arr[r]=temp;

            //如果交换完后,发现这个arr[l] == middle 相等 r--, 前移
            if(arr[l] == middle){
                r-=1;
            }
            //如果交换完后,发现这个arr[r] == middle 相等 l--, 前移
            if(arr[r] == middle){
                l+=1;
            }
        }

        // 如果 l == r, 必须l++, r--, 否则为出现栈溢出
        if(l == r){
            l+=1;
            r-=1;
        }
        //向左递归
        if(left l){
            quickSort(arr,l,right);
        }

    }

}

2、运行main函数,运行结果如下: 在这里插入图片描述

五、测试快速排序算法所消耗的时间示例

1、代码

package com.rf.springboot01.dataStructure.sort;

import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;

/**
 * @description: 测试快速排序算法所消耗的时间示例
 * @author: xiaozhi
 * @create: 2020-08-10 22:04
 */
public class QuickSort2 {
    public static void main(String[] args) {
        int arr[] = new int[10000000];
        for(int i=0;i= r){
                break;
            }
            //交换
            temp=arr[l];
            arr[l]=arr[r];
            arr[r]=temp;

            //如果交换完后,发现这个arr[l] == middle 相等 r--, 前移
            if(arr[l] == middle){
                r-=1;
            }
            //如果交换完后,发现这个arr[r] == middle 相等 l--, 前移
            if(arr[r] == middle){
                l+=1;
            }
        }

        // 如果 l == r, 必须l++, r--, 否则为出现栈溢出
        if(l == r){
            l+=1;
            r-=1;
        }
        //向左递归
        if(left l){
            quickSort(arr,l,right);
        }

    }
}

2、运行main函数,运行结果如下: 在这里插入图片描述在这里插入图片描述

本地计算机,win10系统,8G内存测试带有一千万个随机数的数组,用快速排序耗时大约2秒

关注
打赏
1661269038
查看更多评论
立即登录/注册

微信扫码登录

0.0463s