美文网首页
Quick Sort

Quick Sort

作者: 无为无悔 | 来源:发表于2016-12-02 21:39 被阅读0次
  • 描述
    实现快速排序算法

  • 分析
    随机选择待排序数组中一个元素为中心轴,将所有小于中心轴的元素移到左边,大于中心轴的元素移到右边,然后对中心轴左边和右边按照以上步骤递归下去,直至有序。
    中心轴的选择很重要,比较好的情况就是恰好选择的元素就是数组的中位数,这时候递归树相对平衡,递归树的高也就是栈的深度,树越平衡,消耗的栈空间越少,最坏情况,即待排序数组逆序,可以演化为冒泡排序,且空间复杂度O(n)。

  • 时间复杂度O(nlogn),空间复杂度O(logn)

public class Solution {

    public void quickSort(int[] arr, int left, int right) {
        int pivotIndex = partition(arr, left, right);
        if(left < pivotIndex - 1)
            quickSort(arr, left, pivotIndex - 1);
        if(right > pivotIndex)
            quickSort(arr, pivotIndex, right);
    }

    public int partition(int[] arr, int left, int right) {
        int pivot = arr[(left+right)/2];
        while(left <= right) {
            while(arr[left] < pivot)
                ++ left;
            while(arr[right] > pivot)
                -- right;
            if(left <= right) {
                swap(arr, left, right);
                ++ left;
                -- right;
            }
        }
        return left;
    }

    public void swap(int[] arr, int a, int b) {
        int tmp = arr[a];
        arr[a] = arr[b];
        arr[b] = tmp;
    }
}

相关文章

  • 排序算法总结

    merge: quick sort:

  • sort

    bubble_sort: select_sort: insert_sort: merge_sort: quick_...

  • 刷题(11)各种排序算法

    把各种排序算法实现一遍 1. quick sort: public void quick_sort(int[] a...

  • Quick Sort

  • Quick Sort

    描述实现快速排序算法 分析随机选择待排序数组中一个元素为中心轴,将所有小于中心轴的元素移到左边,大于中心轴的元素移...

  • QUICK SORT

  • Quick sort

    快速排序是一种分治算法,将一个数组分成两个子数组,将两部分独立的排序。快速排序和归并排序是互补的:归并排序将数组分...

  • Quick Sort

  • Quick Sort

    quick sort体现了分治的思想。平均情况下快速排序的时间复杂度是Θ(nlgn),最坏情况是n^2。由于递归调...

  • N(logN) 时间复杂度の排序算法

    这里讨论N(logN)的常见算法。 Merge Sort Quick Sort Heap Sort 输入暂时都是整...

网友评论

      本文标题:Quick Sort

      本文链接:https://www.haomeiwen.com/subject/eppqmttx.html