各种排序算法全方位分析

分治法:对于一个规模为n的问题,可以将其划分为k个规模较小的问题,这些子问题互相独立且与原问题形式相同,通过递归解这些子问题,然后将子问题的解合并得到原问题的解。

动态规划法:利用分治思想,将问题实例分解为更小、相似的子问题,并存储子问题的解而避免计算重复的子问题。

贪心算法:它是一种不追求最优解,而希望得到较为满意解的方法。只看到眼前利益,去选择最优的,而不考虑其他情况,但是比穷举好,节约资源,不需要·回溯。

回溯算法:基本思想:从一条路往前走,能进则进,不能进就退回来,换一条路试试。其实现一般要用到递归和堆栈。

分治和动态规划通常要用到回溯。

直接插入排序:基本思想:每步将一个待排序的记录按其排序码值的大小,插到前面已经排好的数的适当位置,直到全部插入完为止。

希尔排序:把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。

直接选择排序:是一种简单的排序方法,它的基本思想是:第一次从R~R[n-1]中选取最小值,与R交换,第二次从R~R[n-1]中选取最小值,与R交换,....,第i次从R[i-1]~R[n-1]中选取最小值,与R[i-1]交换,.....,第n-1次从R[n-2]~R[n-1]中选取最小值,与R[n-2]交换,总共通过n-1次,得到一个按排序码从小到大排列的有序序列·.

堆排序:是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。

冒泡排序:每一次循环大数沉底

它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列.

快速排序:在平均状况下,排序一个项目要比较O(logn)。在最坏状况下则需要O(n^2)次比较,但这种状况并不常见。采用“分而治之、各个击破”的思想。

从数列中挑出一个元素,称为“基准”,重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(相同的数可以到任何一边)。在这个分区结束之后,该基准就处于数列的中间位置。

归并排序:该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并

基数排序:基本思想:从低位到高位依次对待排序的关键码进行分配和收集,经过d趟分配和收集,就能得到一个有序序列。

以最高位数为准:

首先根据个位数的数值,在走访数值时将它们分配至编号0到9的桶中:

接着再进行一次分配,这次是根据十位数来分配:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值