算法导论
文章平均质量分 57
慧钦
修身修心
展开
-
第二章 简单排序算法--插入排序,冒泡排序,选择排序
插入排序/* * Insertion_sort time complexity: * Best-case: if the original sequence is sorted in a wanted-order: O(n) * Worst-case: if the original array is sorted in a reverse order: O(n^2)原创 2012-11-14 12:43:01 · 436 阅读 · 0 评论 -
第二章 合并排序-分治算法
/* * p,q,r是下标,满足p * 将两个合并排好序代替当前子数组A[p..r] * Running time: O(n) n = r-q+1 ÊÇÁœŽýºÏ²¢×ÓÊý×éÔªËصĞöÊýºÍ */ void merge(int a[], int p, int q, int r) { int *left, *right; int n1原创 2012-11-14 12:52:59 · 401 阅读 · 0 评论 -
算法导论 第六章 堆排序 习题6.5-8 k路合并排序
/* * 请给出一个时间为O(nlgk),用来将k个已排序链表合并为一个排序链表的算法。 * 此处n为所有输入链表中元素的总数。(提示:用一个最小堆来做k路合并) * * 思路:利用有k个元素的最小堆有lgk的复杂度, * 所以堆的元素组成要每个链表的一个元素组成 * * 具体步骤: *step1:取每个链表的第一个元素,构造成一个含有k个元素的堆 *step2原创 2012-12-01 00:14:55 · 1019 阅读 · 0 评论 -
算法导论第六章 堆排序
算法导论第六章 堆排序一 概念1.(二叉)堆是数据结构的一种数组对象(堆是数组而不是一般的树)2.但它可以视为一棵完全二叉树,二叉树的层次遍历对就数组元素的顺序对应,树根对应A[1], 对于第i个元素,有以下主要关系: PARENT(i) return i/2 // its parent LEFT(i) return 2*i // its left ch原创 2012-11-30 21:01:57 · 657 阅读 · 0 评论