zoukankan      html  css  js  c++  java
  • java代码的快速排序理解

     1 package changesort;
     2 
     3 
     4 public class MyQuickSort {
     5 
     6     //冒泡排序交换相邻元素消除一个逆序,快速排序通过两个不相邻元素的交换,可能消除多个逆序
     7     public static void sort(int arr[],int low, int high) {
     8         if(low<high) {
     9             int pos = partition(arr,low,high);
    10             sort(arr, low, pos-1);
    11             sort(arr, pos+1, high);
    12         }        
    13     }
    14     //选取第一个元素为枢轴,给pivot找一个位置,保证pivot左边的比它小,pivot右边的比它大,通过递归直到分割的子表长度为1
    15     public static int partition(int arr[],int low , int high) {
    16         int pivot = arr[low];//pivot存储arr[low]的值,low这个位置可以存放右边第一个小于pivot的值
    17         while(low<high) {
    18             while(low<high && arr[high]>=pivot) {
    19                 high--;
    20             }
    21             if(low<high) {
    22                 arr[low] = arr[high];//将右边第一个小于pivot的值给arr[low],high这个位置空了
    23                 low++;
    24             }
    25             
    26             while(low<high && arr[low]< pivot) {//没有等于号时(3,3,3,1,2)证明不稳定,有等于号时(3,3,2)证明不稳定
    27                 low++;
    28             }
    29             if(low<high){
    30                 arr[high] = arr[low];//将左边第一个大于pivot的值给arr[high],low这个位置空了
    31                 high--;
    32             }
    33         }
    34         arr[low] = pivot;//low已经等于high了,pivot找到了它的位置
    35         return low;
    36     }
    37 
    38 }

    时间复杂度:

    快速排序取决于递归深度

    最坏情况:已经排好顺序 ,O(n2)

    最好情况:每次序列一分为二,O(nlog2n),完全二叉树

  • 相关阅读:
    Ubuntu 16.04 swoole扩展安装注意!!!
    go mod使用指南
    基于gin框架-验证码demo
    go(基于gin开发提升效率)--Air
    go mod路径引入并代码提示
    golang在win10下安装问题(一)
    win10下beego安装注意坑(一)
    API统一管理平台-YApi
    vim编辑
    swool安装(centos7)
  • 原文地址:https://www.cnblogs.com/interfaceone/p/7515893.html
Copyright © 2011-2022 走看看