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),完全二叉树

  • 相关阅读:
    lucene入门
    ssm框架整合
    springmvc异常处理器和拦截器
    软件测试的策略是什么?
    软件质量保证体系是什么 国家标准中与质量保证管理相关的几个标准是什么?他们的编号和全称是什么?
    • β测试
    • α测试
    • 白盒测试
    黑盒测试
    • 数据库的兼容性
  • 原文地址:https://www.cnblogs.com/interfaceone/p/7515893.html
Copyright © 2011-2022 走看看