• 排列的学习资料-数据结构与算法


      如果按排序过程中依据的不同原则对内部排序方法进行分类,大致可分为5类:插入排序、交换排序、选择排序、归并排序和分配排序;如果按排序过程中所需的工作量来区分,则可分为3类:
    1、简单的排序方法,其时间复杂度为 O(n2
    2、改进的排序方法,其时间复杂度为O(nlog2n);
    3、基数排序,其时间度为O(d*n)。
    排序过程只有两种基本操作:比较记录和移动记录。
    常用的基本排序算法有5种:
         ·插入排序(insertionsort),有直接插入排序、二分法插入排序、希尔(Shell)排序。
    ·交换排序(exchangesort),有冒泡排序、快速排序(分区交换排序)。
    ·选择排序(selectionsort) ,有直接选择排序、堆排序。
    ·归并排序(mergesort)
    ·分布排序(distributionsort),又称基数排序。

      为了形象地解释每种排序算法是怎样工作的,让我们来看一看怎样用这些方法对桌上一付乱序的牌进行排序。牌既要按花色排序(依次为梅花、方块、红桃和黑心),还要按点数排序(从2到A)。
    插入排序的过程为:从一堆牌的上面开始拿牌,每次拿一张牌,按排序原则把牌放到手中正确的位置。桌上的牌拿完后,手中的牌也就排好序了。
    交换排序的过程为:
    (1)先拿两张牌放到手中。如果左边的牌要排在右边的牌的后面(左边的花色或者点数比右边大),就交换这两张牌的位置。
    (2)然后拿下一张牌,并比较最右边两张牌,如果有必要就交换这两张牌的位置。
    (3)重复第(2)步,直到把所有的牌都拿到手中。
    (4)如果不再需要交换手中任何两张牌的位置,就说明牌已经排好序了;否则,把手中的牌放到桌上,重复(1)至(4)步,直到手中的牌排好序。
    选择排序的过程为:在桌上的牌中找出最小的一张牌,拿在手中;重复这种操作,直到把所有牌都拿在手中。
    归并排序的过程为:把桌上的牌分为52堆,每堆为一张牌。因为每堆牌都是有序的(记住,此时每堆中只有一张牌),所以如果把相邻的两堆牌合并为一堆,并对每堆牌进行排序,就可以得到26堆已排好序的牌,此时每一堆中有两张牌。重复这种合并操作,就可以依次得到13堆牌(每一堆中有4张牌),7堆牌(有6堆是8张牌,还有一堆是4张牌),最后将得到52张的一堆牌。
    分布排序(也被称作radix sort,即基数排序)的过程为:先将牌按点数分成13堆,然后将这13堆牌按点数顺序叠在一起;再将牌按花色分成4堆,然后将这4堆牌按花色顺序叠在一起,牌就排好序了。

    二、为什么是n2 ,nlog2n 或 d*n?
    排序的过程,实质就是一个插入的过程。
    简单的排序算法就是把第n个数插入到其它(n-1)个数的过程。n个数共需要插入n(n-1)次,所以其时间复杂度不超过n2
    改进的排序算法基本思路是“分解”:选择一个恰当的关键字,把一个排序任务分解成两个小的排序任务。理想情况下,关键字总能把原来的排序任务分解成两组长度相等的排序任务。于是,在下一轮的排序中,只需要在本小组内进行比较(长度是上一轮的1/2)。这个过程相当于一棵倒过来的二叉排序树。根椐n个数据元素生成一棵二叉排序树,相当于进行n次在二叉排序树上插入一个新结点的操作,因而其时间复杂度不超过O(nlog2n)。

    参考资料:C语言编程常见问题解答 Pauls S.R.Chisholm 等著 张芳妮 吕波译 清华大学出版社1996年版


    范晨鹏
    ------------------
    软件是一种态度
    成功是一种习惯


  • 相关阅读:
    全国分乡镇第七次人口普查数据shp数据库省市区县街道
    FME视频教程
    全国1949-2020最新历年各省、市州、县区高铁铁路高速公路国道省道县道乡道路网数据库
    中国分省市县水土流失土地利用土壤侵蚀现状图及简介
    全国1949-2019最新历年各省、市州、县区矢量边界数据库
    中国地震动参数区划图2015年分乡镇矢量数据
    全国分乡镇第五次人口普查数据shp数据库省市区县街道
    全国分乡镇第六次人口普查数据shp数据库省市区县街道
    全国路网水系河流乡镇矢量行政区划边界(省市区县乡镇)、行政地名矢量数据shptabdwgcdr
    bitnami_redmine3.3.0-1 问题及备份恢复
  • 原文地址:https://www.cnblogs.com/diylab/p/473224.html
Copyright © 2020-2023  润新知