算法导论
文章平均质量分 82
wzb56
never say die! never ever give up!
人活着,你也让别人活!
前半生不犹豫,后半生不后悔!
改变一生的无外乎两种东西:一是你读过的书,一是你遇到的人。
改变命运的无外乎两种东西:一是你读过的书,一是你遇到的人。
展开
-
快速排序(quickSort)四种经典实现
一、.算法分析快速排序使用分治(Divide and conquer)策略,从序列中选取pivot ,把这个序列(list)通过这个pivot分为两个子序列(sub-lists),一个子序列中所有的元素都不大于pivot,另一个子序列中的所有元素都不小于pivot,从而确定了pivot在整个序列的位置,对每个子序列执行同样的操作,直至序列中的每个元素的最终位置都确定。步骤为:从数列中挑原创 2012-03-13 16:06:03 · 3090 阅读 · 0 评论 -
归并排序(mergeSort) 与 分而治之策略(divide and conquer)
1. 分治: (divide and conquer) 一个大的问题,可以分解为相似的子问题,每个相似的子问题都和原问题有一样的求解方法。可以将问题细化,直到子问题足够小能够求解,然后将子问题的解逐级合并,以最终求得原问题的解。2. 归并排序算法的递归实现。#include #include #define max 100int tmp[max];原创 2012-03-09 22:23:07 · 2006 阅读 · 0 评论 -
插入排序InsertSort的三种实现方式及循环不变式的使用
一、循环不变式的概念:在循环结构设计中,核心设计就是找到循环结构中循环不变式(loop invariant);方法是找中间的一个普通循环迭代,同时保证满足边界条件(edge case)。循环不变式满足的三个条件:1. 初始化: 在初始化状态下,循环不变式保持某种性质。2.保持性: 循环不变式的性质,在迭代的同时能够保持。3.终止性: 循环不变式终止时,能够保证某种原创 2012-03-08 21:48:42 · 1188 阅读 · 1 评论 -
堆(heap)、堆排序(heapSort)、优先级队列
1. 堆数据结构: 堆是一种数据结构。分为大根堆和小根堆。 对堆数组,其分布与一个完全二叉树对应,其下标的几个关系: 当i的取值满足区间[1, n]时; 数组的小标从1开始; parent(i) = i >> 1; left(i) = 2*i; right(i) = 2*i +1;原创 2012-03-09 23:40:01 · 996 阅读 · 0 评论 -
统计一个整数n的二进制表示中1的个数的几种解法
统计一个整数n的二进制表示中1的个数;分析:此题有多种解法.1. 除2取余法:求一个整数的二进制的表示是,用的方法是除2取余。对于本题,只是统计一下余数为1的个数而已。2. 位模式法+移位:1的变种,用移位代除2,该方法更高效。用位模式,与1相与,取得一位。3. 模式位法: n = n& (n -1); 考虑 n 与 n -1的二进制表示,两者相&, n-1总能将n的最低位的1,原创 2012-10-29 18:37:56 · 2534 阅读 · 0 评论