数据结构----排序总结

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档



前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考


一、直接插入排序

       直接插入排序是一种简单的排序方法。具体做法是:在插入第i个记录时,R_{1},R_{2},R_{3}...R_{i-1}已经排好序,这时将R_{i}与前i个记录依次比较,找到插入的合适位置,插入位置及其后的记录依次向后移动。

举例:

算法:

       直接插入排序法在最好情况下(待排序列已按关键码有序),每趟排序只需作1次比较且不需要移动元素,因此n个元素排序时的总比较次数为n -1次,总移动次数为0次。在最坏情况下(元素已经逆序排列),进行第i趟排序时,待插入的记录需要同前面的i个记录都进行1次比较,因此,总比较次数为\sum_{i=1}^{n-1}i=\frac{n(n-1)}{2}.排序过程中,第i趟排序时移动记录的次数为i+1(包括移进,移出temp),总移动次数为\sum_{i=2}^{n}(i+1)=\frac{(n+3)(n-2)}{2}.

       由此,直接插入排序是一种稳定的排序算法,其时间复杂度为O(n^{2}).排序的过程中仅需要一个元素的辅助空间,空间的复杂度为O(1).


二、简单选择排序

       n个记录进行简单排序的基本方法是:通过n-i次关键字之间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i(1\leqslant i\leqslant n)个记录进行交换,当i等于n时所有记录有序排列。

举例:

       简单选择排序法在最好情况下( 待排序列已按关键码有序)不需要移动元素,因此n个元素排序时的总移动次数为0次。在最坏情况下( 元素已经逆序排列),每趟排序移动记录的次都为3次(两个数组元素交换值),共进行n -1趟排序,总移动次数为3(n -1)。 无论在哪种情况下,元素的总比较次数为\sum_{i=1}^{n-1}(n-i)=\frac{n(n-1)}{2}.
       由此,简单选择排序是一种不稳定的排序方法, 其时间复杂度为O(n)。排序过程中仅需要一个 元素的辅助空间用于数组元素值的交换,空间复杂度为0(1)。


三、冒泡排序 

       n个记录进行冒泡排序的方法是:首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则交换两个记录的值,然后比较第二个记录和第三个记录的关键字,以此类推,直至第n-1个记录和第n个记录的关键字比较完为止。上述过程称作一趟冒泡排序,其结果是关键字最大的记录被交换到第n个位置。然后进行第二趟冒泡排序,对前n-1个记录进行同样的操作,其结果是关键字次大的记录被交换到第n-1个位置。当进行完第n-1趟时,所有记录有序排列。

举例:

      冒泡排序法在最好情况下(待排序列已按关键码有序)只需作1趟排序,元素的比较次数为n-1且不需要交换元素,因此总比较次数为n-1次,总交换次数为0次。在最坏情况下(元素已经逆序排列),进行第i趟排序时,最大的i-1个元素已经排好序,其余的n-(i-1)个元素需要进行n-i次比较和n-i次交换,因此总比较次数为 \sum_{i=1}^{n-1}(n-i)=\frac{n(n-1)}{2},总交换次数为\sum_{i=1}^{n-1}(n-i)=\frac{n(n-1)}{2}

       由此,冒泡排序是一种稳定的排序方法, 其时间复杂度为O(n^{2})。排序过程中仅需要一个 元素的辅助空间用于数组元素值的交换,空间复杂度为0(1)。 

四、希尔排序

五、快速排序

       快速排序的基本思想是:通过一趟排序将待排的记录划分为独立的两部分,称为前半区和
后半区,其中,前半区中记录的关键字均不大于后半区记录的关键字,然后再分别对这两部分
记录继续进行快速排序,从而使整个序列有序。
       一趟快速排序的过程称为一次划分,具体做法是:附设两个位置指示变量i和j,它们的初值分别指向序列的第一个记录和最后一 个记录。 设枢轴记录(通常是第一个记录) 的关键字为pivot,则首先从j所指位置起向前搜索,找到第一个关键字小于pivot的记录时将该记录向前移到i指示的位置,然后从i所指位置起向后搜索,找到第一个关键字大于pivot 的记录时将该记录向后移到所指位置,重复该过程直至i与j相等为止。

举例: 

       快速排序算法的时间复杂度为O(nlog_{2}n),在所有算法复杂度为此数量级的排序方法中,快速排序被认为是平均性能最好的一种。但是,若初始记录序列按关键字有序或基本有序时,即每次划分都是将序列划分为某一半序列的长度为0的情况,此时快速排序的性能退化为时间复杂度是O(n^{2})快速排序是不稳定的排序方法。 

六、归并排序

 所谓“归并”,是将两个或两个以上的有序文件合并成为一个新的有序文件。从线性表的讨论可知,将两个有序表合并成为一个有序表, 无论是顺序存储结构还是链式存储结构,都是容易实现的。利用归并的思想可以进行排序。归并排序是把一个有 n个记录的无序文件看成是由n个长度为1的有序子文件组成的文件,然后进行两两归并,得到\left \lceil \frac{n}{2} \right \rceil个长度为2或1的有序文件,再两两归并,如此重复,直至最后形成包含n个记录的有序文件为止。这种反复将两个有序文件归并成一个有序文件的排序方法称为两路归并排序。

举例:

       n个元素进行二路归并排序的时间复杂度为O(nlog_{2}n),空间复杂度为O(n)。二路归并排序
是稳定的排序方法。






 



总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值