美文网首页数据结构
内排序5:快速排序

内排序5:快速排序

作者: 玲儿珑 | 来源:发表于2020-05-04 03:32 被阅读0次

快速排序(划分排序)又被认为是对泡排序的一种改进。在各种排序方法中,这种方法的元素之间的比较次数较少,因而速度较快,被认为是目前最好的内排序方法之一。
在跑排序中,元素的比较和交换动作是在相邻元素之间进行的,而快速排序是在两端进行的,因而,总的比较和移动的次数减少。

核心思想:在当前参加排序的序列(ks,ks+1,...,kt)中任意选择一个元素(通常称该元素为分界元素或者基准元素),把小于等于分界元素的所有元素都移动到分界元素的前边,把大于等于分界元素的所有元素都移动到分界元素的后边,这样,分界元素正好处在排序的 最终位置上,并且把当前参加排序的序列分成前后两个子序列。然后分别的对这两个子序列递归地进行上述过程,直到使得所有元素都到达整个排序后它们应处的最终位置上。
排除过程中需要设置两个整形变量i和j,每次排除的初始,i给出当前参加排序序列中第1个元素的位置(即s),j给出当前参加排序序列的最后一个元素的位置(即t+1),这样,整个快速排序过程可以归纳为执行以下步骤:
1.反复执行i+1送i的动作,直到ki>=ks或者i==t;然后反复执行j-1送j的动作,直到kj<=ks或者j==s。
2.若i<j,则将ki与kj交换位置,然后重复步骤1、2或者3.
3.若i>=j,则将kj与ks交换位置,然后分别递归地对(ks,...,kj-1)和(kj+1,...,kt)中长度大于1的子序列执行上述过程,直到整个序列排序结束。

具体算法如下:

function quick(arr, s, t) {
    let i, j, temp
    if ( s<t ) {
        i = s
        j = t+1
        while (1) {
            do {
                i++
            } while (!(arr[i]>arr[s] || i==t ));
            do {
                j--
            } while (!(arr[j]<arr[s] || j==s));
            if ( i<j ) {
                temp = arr[i]
                arr[i] = arr[j]
                arr[j] = temp
            } else {
                break;
            }
        }
        temp = arr[s]
        arr[s] = arr[j]
        arr[j] = temp
        arguments.callee(arr, s, j-1)
        arguments.callee(arr, j+1, t)
    }
}
function quickSort(arr) {
    let n = arr.length
    quick(arr, 0, n-1)
    return arr
}

let arr = [5,3,8,1,9,2,7,4,6,10]
quickSort(arr)

性能:
时间复杂度:最坏O(n2),平均O(nlog2n)。
空间复杂度:最坏O(n),平均O(log2n)。
是不稳定性排序。
如果各个部分的分界元素恰好是最大值元素,快排就会倒退为”慢速排序“。因此,在选择确定分界元素方法还是应该尽可能的小心。至于如何有效的选择分解元素,可参考其他资料。

相关文章

  • 内排序5:快速排序

    快速排序(划分排序)又被认为是对泡排序的一种改进。在各种排序方法中,这种方法的元素之间的比较次数较少,因而速度较快...

  • 排序方法

    1.选择排序 2.插入排序 3.冒泡排序 归并排序归并排序5.快速排序快速排序

  • 常见排序算法

    1、冒泡排序 2、插入排序 3、选择排序 4、快速排序 5、堆排序

  • 排序

    目的 方便查找 内排序 交换 冒泡排序 快速排序 选择 直接选择 堆排序 插入 -直接插入 堆排序 基数排序

  • 排序

    1 冒泡排序 2 选择排序 3 插入排序 4 归并排序 5 快速排序 6 堆排序

  • 排序算法

    1、冒泡排序 2、选择排序 3、插入排序 4、希尔排序 5、堆排序 6、归并排序 7、快速排序

  • 排序算法----常见的排序算法

    1.冒泡排序 2.简单选择排序 3.直接插入排序 4.快速排序 快速排序 5.堆排序 堆排序 6.希尔排序 希尔排...

  • 数据结构——排序

    目录 1、冒泡排序 2、选择排序 3、插入排序 4、希尔排序 5、归并排序 6、快速排序 7、计数排序 8、桶排序...

  • Python排序方法

    1.冒泡排序 2.选择排序 3.插入排序 4.希尔排序 5.快速排序

  • 数据结构

    排序算法 1、选择排序 2、插入排序 3、希尔排序 4、归并排序 5、快速排序 6、堆排序 查找 字符串

网友评论

    本文标题:内排序5:快速排序

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