O(n log n)时间复杂度和常量地址空间下进行链表排序。
链表快速排序与链表的归并排序,以及两种性能对比思考。...
分类:
其他好文 时间:
2014-08-27 18:50:38
阅读次数:
239
一、归并排序
算法思路就是把数组分成左右两个部分,然后再进行归并两个有序表
void merge(int* num,int start,int mid,int end,int* copy)
{
int i = start,m = mid,j = mid+1,n = end,k=start;
while(i <= m && j <= n)
{
if(num[i] < num[j])co...
分类:
其他好文 时间:
2014-08-27 13:04:57
阅读次数:
247
发现一个小小的 逆序数里真的藏了好多东西啊=-=解决这题 你需要知道一点...对于一串给定的数字 我随便写一串吧..index: 0 1 2 3 4value: 4 8 7 5 6 这时候 总的逆序对数是 3+2=5 假如我们只能进行相邻元素的交换 这最好情况是什么呢?那肯定就是...
分类:
其他好文 时间:
2014-08-26 17:12:06
阅读次数:
170
归并排序是建立在归并操作上的一种有效的排序算法。该算法是採用分治法(Divide and Conquer)的一个很典型的应用。首先考虑下怎样将将二个有序数列合并。这个很easy,仅仅要从比較二个数列的第一个数,谁小就先取谁,取了后就在相应数列中删除这个数。然后再进行比較,假设有数列为空,那直接将还有...
分类:
其他好文 时间:
2014-08-26 15:01:46
阅读次数:
209
这是我的博文系列《内部排序算法》的第一篇。所谓排序,就是要整理文件中的记录,使之按关键字递增(或递减)次序排列起来。所谓内部排序,是指在排序过程中,若整个文件都是放在内存中处理,排序时不涉及数据的内、外存交换(外排序的定义则相反)。
内部排序法按照策略可以划分为五类:插入排序、选择排序、交换排序、归并排序和分配排序。待排文件的存储方式采用顺序表(或直接用向量)作为存储结构(其他的...
分类:
其他好文 时间:
2014-08-26 00:31:45
阅读次数:
352
日常操作中常见的排序方法有:冒泡排序、快速排序、选择排序、插入排序、希尔排序,甚至还有基数排序、鸡尾酒排序、桶排序、鸽巢排序、归并排序等。冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就...
分类:
编程语言 时间:
2014-08-25 21:07:44
阅读次数:
373
#include using namespace std;void merge(int* ptr,int first, int mid, int last){ int len = last - first + 1; int *temp = new int[len]; ...
分类:
其他好文 时间:
2014-08-25 20:59:14
阅读次数:
229
外排序
外排序问题的出现,主要是因为内存不够。当需要排序的数据量过多,以至于无法一次性把所有的数据都放入内存,这导致了外排序问题的出现。解决大数据量排序的方法是:先分块排序,后进行块合并。
外排序步骤
把原数据分成几段读入内存,以至于每一块都可以完整的在内存中进行排序,排序好后,写入外部存储设备。
归并已排序好的数据块。
这就是归并排序在外排序中的应用。
对每块数据进行排序,可以使用各种内排序方法:快速排序、归并排序、堆排序等。这个比较简单,下面模拟一个对排序好的数据块进行归并的过程。...
分类:
其他好文 时间:
2014-08-23 19:07:41
阅读次数:
201