快速排序是排序算法中最受青睐的算法之一,相对于堆排序和归并排序而言,即便具有相同的复杂度O(NlogN)。面对大数据而言,快排的效率也更高。一般而言,数据结构中的排序算法都是采取的双向指针法。在之前写的一篇博文《排序算法(初级版)之快排、归并、堆排序》中已经有过总结。这里就不再啰嗦了。本篇博文主要讲...
分类:
其他好文 时间:
2014-08-22 17:48:39
阅读次数:
388
归并排序:将两个已经排序的串行合并成一个串行的操作。
算法描述如下:
申请空间,使其大小为两个已经排序串行之和,该空间用来存放合并后的串行;设定两个指针,最初位置分别为两个已经排序串行的起始位置;比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置;重复步骤3直到某一指针到达串行尾将另一串行剩下的所有元素直接复制到合并串行尾...
分类:
编程语言 时间:
2014-08-21 22:49:05
阅读次数:
292
1.链表1.1链表的存储表示//链表的存储表示typedef int ElemType;typedef struct LNode{ ElemType data; struct LNode *next;}LNode, *LinkList;1.2基本操作创建链表:/* * 创建链表。 * 形参num为链...
分类:
其他好文 时间:
2014-08-21 21:01:14
阅读次数:
221
这题前一阵子就看到了,一直没时间做,昨晚睡前想了想,要求n*log(n)以内的时间复杂度,第一时间想到的就是归并、快排和希尔排序(注:希尔排序时间为O(n^1.3),在数据量大于2的情况下小于n*log(n)),个人以为,链表的特性更适合归并,所以采用归并排序,实现的merge代码如下:publ.....
分类:
其他好文 时间:
2014-08-21 19:01:54
阅读次数:
226
Ultra-QuickSortTime Limit:7000MSMemory Limit:65536KTotal Submissions:39279Accepted:14163DescriptionIn this problem, you have to analyze a particular s...
分类:
其他好文 时间:
2014-08-19 20:29:15
阅读次数:
247
归并排序 归并排序(MergeSort)的基本思想是:将待排序文件看成为n个长度为1的有序子文件,把这些子文件两两归并,使得到「n/2」个长度为2的有序子文件;然后再把这「n/2」个有序文件的子文件两两归并,如此反复,直到最后得到一个长度为n的有序文件为止,这种排序方法成为二路归并排序。例如,...
分类:
其他好文 时间:
2014-08-19 16:01:04
阅读次数:
191
排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。 本文将依次介绍上述八大排序算法。算.....
分类:
其他好文 时间:
2014-08-19 14:31:04
阅读次数:
280
概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。 快速排序:是目前基于比...
分类:
其他好文 时间:
2014-08-19 12:45:54
阅读次数:
247
普通的归并排序,需要一个额外的数组来保存每次merge的结果;如果要求不使用额外空间,那么每次merge的时候需要做一些处理。思路:合并left[] 和 right[]时,假如right[0]应该放入left[3],那么:①可以用一个var来保存right[0],然后将left[3]之后的元素右移一...
分类:
其他好文 时间:
2014-08-19 00:54:23
阅读次数:
268
分而治之,归并排序
算法简单易懂,第一次编写错误,误把原数组下表当做临时数组考虑,结果可想而知,访问越界
下面是正确代码
import java.util.Scanner;
public class MergeSort {
/**
* @param args
*/
public static void main(String[] args)
{
// TO...
分类:
编程语言 时间:
2014-08-18 18:37:12
阅读次数:
254