zoukankan      html  css  js  c++  java
  • 交换排序之快速排序(Java)

    交换排序之快速排序(Java)

    博客说明

    文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!

    快速排序法介绍

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

    代码

    package cn.guizimo.sort;
    
    import java.util.Arrays;
    
    public class QuickSort {
        public static void main(String[] args) {
            int[] arr = {-9, 78, 0, 23, -587, 71};
            System.out.println("排序前");
            System.out.println(Arrays.toString(arr));
            quickSort(arr, 0, arr.length - 1);
            System.out.println("排序后");
            System.out.println(Arrays.toString(arr));
        }
    
        public static void quickSort(int[] arr, int left, int right) {
            int l = left;
            int r = right;
            int temp = 0;
            int pivot = arr[(left + right) / 2];
    
            while (l < r) {
                while (arr[l] < pivot) {
                    l += 1;
                }
                while (arr[r] > pivot) {
                    r -= 1;
                }
                if (l >= r) {
                    break;
                }
                temp = arr[l];
                arr[l] = arr[r];
                arr[r] = temp;
    
                if (arr[l] == pivot) {
                    r -= 1;
                }
                if (arr[r] == pivot) {
                    l += 1;
                }
            }
            if (l == r) {
                l += 1;
                r -= 1;
            }
            //向左递归
            if (left < r) {
                quickSort(arr, left, r);
            }
            //向右递归
            if (right > l) {
                quickSort(arr, l, right);
            }
        }
    }
    
    
    测试

    image-20200627133332316

    测试速度

    package cn.guizimo.sort;
    
    import java.util.Arrays;
    
    public class QuickSort {
        public static void main(String[] args) {
            int max = 80000;
            int[] arr = new int[max];
            for (int i = 0; i < max; i++) {
                arr[i] = (int)(Math.random() * 8000000);
            }
            long date1 = System.currentTimeMillis();
            quickSort(arr, 0, arr.length - 1);
            long date2 = System.currentTimeMillis();
            System.out.println("快速排序"+max+"数组的时间为:"+(date2-date1));
        }
    
        public static void quickSort(int[] arr, int left, int right) {
            int l = left;
            int r = right;
            int temp = 0;
            int pivot = arr[(left + right) / 2];
    
            while (l < r) {
                while (arr[l] < pivot) {
                    l += 1;
                }
                while (arr[r] > pivot) {
                    r -= 1;
                }
                if (l >= r) {
                    break;
                }
                temp = arr[l];
                arr[l] = arr[r];
                arr[r] = temp;
    
                if (arr[l] == pivot) {
                    r -= 1;
                }
                if (arr[r] == pivot) {
                    l += 1;
                }
            }
            if (l == r) {
                l += 1;
                r -= 1;
            }
            //向左递归
            if (left < r) {
                quickSort(arr, left, r);
            }
            //向右递归
            if (right > l) {
                quickSort(arr, l, right);
            }
        }
    }
    
    

    image-20200627133734166

    感谢

    尚硅谷

    万能的网络

    以及勤劳的自己
    关注公众号: 归子莫,获取更多的资料,还有更长的学习计划

  • 相关阅读:
    telnet -测试端口号
    JMS与MQ详解(有项目)
    Spring JdbcTemplate方法详解
    Spring任务调度器之Task的使用
    基于注解的Spring AOP的配置和使用
    JSONObject转换JSON--将Date转换为指定格式
    request.getParameterMap()使用方法
    python中的内存管理
    python解释器和变量
    理解什么是操作系统
  • 原文地址:https://www.cnblogs.com/guizimo/p/13198160.html
Copyright © 2011-2022 走看看