• 排序算法(高级篇,整理自学堂在线邓俊辉老师《数据结构》课程)


    大家好,我是小鸭酱,博客地址为:http://www.cnblogs.com/xiaoyajiang

    高级篇算法,包括 快速排序和希尔排序。首先介绍快速排序。

    1. quicksort,C.A.R.Hoare (1934~)Turing Award,1980

    2. 分治策略,分而治之

    quicksort VS. mergesort

    (1) 将序列分为两个子序列:S = S1 + S2        规模缩小,彼此独立(max(S1) <= min(S2))

    (2) 在子序列分别【递归地】排序之后,原序列自然有序  sorted(S) = sorted(S1) + sorted(S2)

    (3) 递归基:只剩单个元素时,本身就是解

    (4)mergesort的计算难点在于【合】,quicksort的难点在于【分】

    好我们来看看quicksort具体实现:

    (1) 轴点pivot

              左边的元素均不比它大;右边的元素均不比它小

    (2)【划分】  [lo, hi - 1] = [lo, mi - 1] + [mi] + [mi + 1, hi - 1];

    算法构架如下

     1 template <typename T>
     2 void Vector<T>::quicksort(Rank lo, Rank hi)
     3 {
     4     if (hi - lo < 2)  // only one element
     5     {
     6         return;
     7     }
     8     Rank mi = partition(lo, hi-1) // construct pivot
     9     quicksort(lo, mi);
    10     quicksort(mi+1, hi);
    11 }

    可见,最重要的是partition这一步

    轴点:(1) 有可能不存在;

               (2) 轴点本身必然是就位的。就位是说,它的左边的元素都不比它大,它右边的元素都不比它小

               (3) 有序的序列中,所有元素均为轴点;反之亦然

    因此,快速排序就是将数组中的每个元素逐个转化为轴点的过程

               (4)通过适当的交换,可使任意元素转换为轴点

    示意图如上。

  • 相关阅读:
    WPF之触发器
    WP之样式
    SqlServer2012——多表连接查询
    SqlServer2012——Select,分组,排序、插入
    sqlserver——视图
    SqlServer规则
    SqlServer自定义数据类型
    SqlServer2012——表
    ES基础使用
    ELK安装
  • 原文地址:https://www.cnblogs.com/xiaoyajiang/p/7859318.html
Copyright © 2020-2023  润新知