zoukankan      html  css  js  c++  java
  • 常用排序算法-快速排序

    简介

      快速排序实际上是对冒泡排序的一种改进,通过一趟排序将要排序的数组分成两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再对这两部分数据分别进行快速排序,整个排序过程递归进行,最终使整个数组有序。

    原理

      快速排序算法的原理是选择一个元素作为基准值,一般选择数组的第一个元素,将比基准值大的元素放在数组的右边,比基准值小的放置在数组的左边。具体过程如下:

      从后向前比较,找到比基准值小的元素,将基准值和当前元素交换位置。

      从前向后比较,找到比基准值大的元素,将基准值和当前元素交换位置。

      重复执行以上过程,直到从前向后比较的索引和从后向前比较的索引值相等,此时对于基准值来说,左边的数据均小于等于基准值,右边的数据均大于等于基准值。

      分别再对基准值左右两侧的数组进行快速排序,直到整个数组均有序。

    程序

    public class QuickSort {
        public static void sort(int[] arr){
            if(arr == null || arr.length == 0)
                throw new IllegalArgumentException("error");
            quickSort(arr, 0, arr.length-1);
        }
        public static void quickSort(int[] arr, int start, int end){
            int l = start;
            int r = end;
            int key = arr[start];
            while(l < r){
                while(l < r && arr[r] >= key)
                    r--;
                if(arr[r] <= key){
                    swap(arr, l, r);
                }
                while(l < r && arr[l] <= key)
                    l++;
                if(arr[l] >= key){
                    swap(arr, l, r);
                }
            }
            if(start < l)
                quickSort(arr, start, l-1);
            if(r < end)
                quickSort(arr, r+1, end);
        }
        private static void swap(int[] arr, int i, int j){
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }

    总结 

      快速排序的时间复杂度最差为O(n^2),最好情况时O(nlogn),平均时间复杂度为O(nlogn)。

      由于递归调用的缘故,快速排序空间复杂度最好情况时O(logn),最坏情况时O(n)。也有的人说快速排序空间复杂度是O(nlogn),或许是因为递归调用O(logn)*数组大小O(n)?。

      由于快速排序会交换两个不相邻的元素,所以快速排序是不稳定的。

  • 相关阅读:
    GXPT(一)——UI设计
    JVM系列文章(四):类载入机制
    poj 2688 状态压缩dp解tsp
    ASP.NET MVC Model绑定(四)
    cocos2dx实例开发之flappybird(入门版)
    qt creator中使用qwt插件
    [CodeEdit--Sublime]一些好用的Plugins
    NBUT 1225 NEW RDSP MODE I
    [IOC]Unity使用
    [Js/Jquery]jquery插件开发
  • 原文地址:https://www.cnblogs.com/silentteller/p/12758059.html
Copyright © 2011-2022 走看看