首页 > 编程知识 正文

选择排序算法c语言(十大经典排序算法总结)

时间:2023-05-06 15:41:09 阅读:77613 作者:2816

概述

1、Sorting Algorithms Animations

2、算法的分类

3、时间复杂度

算法

1、冒泡排序

重复访问要排序的元素列,一次比较两个相邻元素,如果它们的顺序不符合,则进行交换。 访问元素的任务是重复,直到相邻元素不再需要交换。

2、快速排序

快速排序是由C. A. R. Hoare在1962年提交的。 其基本思想是,将排序后的数据用一次排序分割成独立的两个部分,其中一个部分的所有数据小于其他部分的所有数据,然后用该方法分别高速地对两个部分的数据进行排序,从而递归地对整个排序过程进行排序

3、直接插入排序

直接插入排序是最简单的排序方法,基本操作是将记录插入到已排序的有序表中,得到记录数增加1的新有序表。

4、选择排序

选择排序是一种简单直观的排序算法。 这是一种在每次从要排序的数据元素中选择最小(或最大)的元素时,都会在序列的开头存储所有要排序的数据元素,直到排序为止的机制。 选择排序是一种不稳定的排序方法。

5、归并排序

合并排序是建立在合并操作基础上的一种有效的排序算法,是一种非常典型的采用分割统治法(Divide and Conquer )的APP应用。 综合有序子序列,得到完全有序序列; 也就是说,使每个子序列有序,然后使子序列的段之间有序。 将两个有序表合并为一个有序表时,称为二路合并。

6、堆排序

堆栈排序是一种利用堆栈树(堆)数据结构设计的排序算法,是一种选择排序。 利用数组的特征,可以快速找到指定索引处的元素。 山分为大根山和小根山,是完整的二叉树。 根堆的要求是每个节点的值小于或等于父节点的值,即A[PARENT[i]]=A[i]。 数组的升序排序必须使用萝卜堆。 因为从萝卜堆的要求可以看出,最大的值一定在堆的顶部。

-caption">

7、希尔排序

希尔排序是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法把数组按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个数组恰被分成一组,算法终止。

8、计数排序

计数排序是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的时间复杂度为线性的O(n+k)(其中k是整数的范围,即max – min + 1),快于任何比较排序算法,这是一种典型的空间换时间的算法。

9、基数排序

基数排序属于“分配式排序”(Distribution Sort),它是透过键值的部分信息,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O(n*log(r)*m) ,其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的稳定性排序法。

10、桶排序

桶排序的工作原理是将数组根据一定的策略均匀的分到有限数量的桶子里,再对每个桶里的内容进行排序。桶排序是鸽巢排序的一种归纳结果,当要被排序的数组内的数值是均匀分配的时候,桶排序使用线性时间O(n) 。桶排序并不是比较排序,它不受到O(n*log(n)) 的下限的影响。

AlgorithmMan

AlgorithmMan-堆排序

AlgorithmMan-桶排序

AlgorithmMan-二叉树排序

另外关于上面的AlgorithmMan,免费开源算法演示工具,欢迎阅读我的另一篇文章,AlgorithmMan,一套免费的算法演示神器(开源动画演示版)

结语

以上是这10种常见排序算法工具的动态图,敬请笑纳。

点击了解更多,即可找到本人所写的关于经典算法的博文。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。