1. 归并排序(MERGE SORT)、快速排序(QUICK SORT)和堆积排序(HEAP SORT)哪个排序算法效率最高?这要看情况。这也就是我把3种算法放在一起讲的原因,可能你更常用其中一种,不过它们各有千秋。归并排序算法,是目前为止最重要的算法之一,是分治法的一个典型应用,由数学家John ...
分类:
其他好文 时间:
2014-07-22 22:46:15
阅读次数:
180
4、归并排序
4.1算法思想——
将数组分为两半,对每部分递归地应用归并排序,直到最后的子数组只包含一个元素。在每部分都排好序后,对它们进行合并。
4.2
时间复杂度——
假如用T(n)表示使用归并排序对n个元素构成的数组进行排序而使用的时间,用mergeTime来表示将两个子分组合并起来而花费的时间。那么
T(n)
= T(n/2)+T(n/2) + mergetime
而me...
分类:
其他好文 时间:
2014-07-22 22:38:33
阅读次数:
189
冒泡排序代码:
#include
#include
using namespace std;
template
void bubbleSort(ItemType theArray[], int n)
{
bool sorted = false; // False when swaps occur
int pass = 1;
while (!sorted && (pass...
分类:
其他好文 时间:
2014-07-22 00:32:35
阅读次数:
363
一、题目给定一组数5,2,4,6,1,3,2,6;运用归并排序法对这组数进行排序。二、题目源程序#include#includeint L[100],R[100];void merge(int numbers[],int left, int mid, int right) { ...
分类:
其他好文 时间:
2014-07-22 00:16:35
阅读次数:
218
Sort ListSort a linked list inO(nlogn) time using constant space complexity.算法思想:时间复杂度为O(nlogn)的排序算法,有快排、归并、堆排序,快排需要往前遍历,因此不适合单链表,堆排序可以,但是需要O(n)的空间,因此...
分类:
其他好文 时间:
2014-07-22 00:03:35
阅读次数:
187
merge sort
----------------------------------------------------------------------
描述:归并排序
思路:
1.将区间对半分割
2.对左、右段分别排序
3.利用inplace_merge将左、右段合并成为一个完整的有序序列
复杂度:O(log n)
源码:
template
void mergesort(BidirectionalIter first, Bidirecti...
分类:
其他好文 时间:
2014-07-20 23:05:52
阅读次数:
245
归并排序是另一种运用分治法排序算法。与快速排序一样,它依赖于元素之间的比较来排序。但是,归并排序需要额外的存储空间来完成排序过程。
同样可以用分治法的思想将排序分为三个步骤。
分:将数据集等分为两半。治:分别在两个部分用递归的方式继续使用归并排序法。合:将分开的两个部分合并成一个有序的数据集。
归并排序与其他排序最大的同步在于,它的归并过程。这个过程就是将两个有序的数据集合并成一个有序的...
分类:
其他好文 时间:
2014-07-20 22:35:13
阅读次数:
283
题意:废话了一大堆就是要你去求一个序列冒泡排序所需的交换的次数。
思路:实际上是要你去求一个序列的逆序队数
看案例:
9 1 0 5 4
9后面比它小的的数有4个
1后面有1个
0后面没有
5后面1个
4后面没有
所以结果为4+1+0+1+0=6
所以逆序对的定义如果不清楚可以自己总结了
这道题说白了就是要你用归并排序求逆序对数。
下面是搜到某牛给的逆序对数的方法:...
分类:
其他好文 时间:
2014-07-20 09:38:35
阅读次数:
234
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个...
分类:
其他好文 时间:
2014-07-19 15:23:57
阅读次数:
241
算法导论在介绍算法时列举了插入排序与并归排序,以此来说明什么事算法,算法效率以及提出了算法设计中重要的思想--分治,也就是将问题划分为规模较小的子问题。这种思想在大规模运算时具有显著的时间开销优势,例如插入排序和并归排序,其时间开销大致分别等于C1N2和C2Nlog2N。下面介绍具体的代码:首先是插...
分类:
其他好文 时间:
2014-07-19 11:23:35
阅读次数:
220