zoukankan      html  css  js  c++  java
  • 经典十大算法——快速排序(java版本)

    1.算法思想

    通过一趟排序将要排序的数据分割成独立的两部分,

    其中一部分的所有数据都比另外一部分的所有数据都要小,

    然后再按此方法对这两部分数据分别进行快速排序,

    整个排序过程可以递归进行,以此达到整个数据变成有序序列。

    2.算法代码

    public class quickSort {
        public static void main(String[] args) {
            int a[] = {8, 1, 3, 5, 2};
            quicksort(a);
            for (int k = 0; k < a.length; k++) {
                System.out.println(a[k]);
            }
        }
        public static void quicksort(int arr[]){
            //进行排序算法
            sort(arr,0,arr.length-1);
        }
        public static void sort(int arr[],int low,int high){
            if(low<high){
                //找到中间那个数
                int mid = partition(arr,low,high);
                //排序左边的
                sort(arr,low,mid-1);
                sort(arr,mid+1,high);
            }
        }
    
        public static int partition(int arr[],int left,int right) {
            //做基准点
            int temp = arr[left];
            while (left < right) {
                //从后向前找找比基准小的
                while (left < right && arr[right] > temp){
                        right = right-1;
                }
                //交换位置
                arr[left] = arr[right];
                //从前向后找比基准大的
                while (left < right && arr[left] < temp){
                    left = left + 1;
                }
                //交换位置
                arr[right] = arr[left];
            }
            //将基准数据放到位置
            arr[left] = temp;
            //返回基准点
            return left;
        }
    }

    3.时间复杂度

    最差情况:当数组原本就按从小到大顺序排列时:
    10 20 30 40 50 60 70 80 第一轮比较,将10分别与20、30、...、80比较,共比较n-1次
    第二轮比较,将20分别与30、...、80比较,共比较n-2次
    ....
    共比较(n-1)+(n-2)+...+1次,即时间复杂度为O(n方),与冒泡排序时间复杂度一样


    一般情况:时间复杂度为O(nlogn) 需要复杂的数学证明

    4.参考博客

    https://cloud.tencent.com/developer/article/1486381?from=15425

    https://www.bilibili.com/video/BV1WF41187Bp

    非学无以广才,非志无以成学。 正是因为今天的不完美,才对未来充满希望。 ----长帆
  • 相关阅读:
    P3390 【模板】矩阵快速幂
    P1082 同余方程
    SQL Server 窗口函数详解:OVER()
    SQL SERVER与C#数据类型对照表
    C# TextBox猜想输入和历史记录输入
    C#操作SQL Server数据库
    SQL Server 一句Sql把表结构全部查询出来
    SQL Server sp_executesql介绍和使用
    SQL Server关于WITH CUBE、WITH ROLLUP和GROUPING使用
    SQL Server 关于CROSS APPLY 和 OUTER APPLY应用
  • 原文地址:https://www.cnblogs.com/changfan/p/15659375.html
Copyright © 2011-2022 走看看