
算法
lisa890608
这个作者很懒,什么都没留下…
展开
-
各种排序的时间空间复杂度稳定性
. 选择排序:不稳定,时间复杂度为O(n^2)选择排序的基本思想是对待排序的记录序列进行n-1遍的处理,第i遍处理是将L[i..n]中最小者与L[i]交换位置。这样,经过i遍处理之后,前i个记录的位置已经是正确的了。 2.插入排序:稳定,时间复杂度为O(n^2)插入排序的基本思想是,经过i-1遍处理后,L[1..i-1]己排好序。第i遍处理仅将L[i]插入L[1..i-1]的转载 2012-10-18 20:02:33 · 598 阅读 · 0 评论 -
堆排序关键过程
最近面试,老是被问到堆排序算法。回答时老是感觉思路不清楚,现在总结一下,把思路弄清楚的。1.堆排序是利用堆的特性对记录序列进行排序的一种排序方法。好的那么堆得特性是什么呢?堆得定义:堆是满足下列性质的数列{r1, r2, …,rn}: 如下图最开始是一个小顶堆。当把97和13 交换后不是堆了,所以我们要调整根节点使之成为堆即筛选。(注意:是自堆顶到叶子的筛选转载 2012-10-09 11:06:45 · 518 阅读 · 0 评论 -
二分查找
二分查找算法是在有序数组中用到的较为频繁的一种算法,在未接触二分查找算法时,最通用的一种做法是,对数组进行遍历,跟每个元素进行比较,其时间为O(n).但二分查找算法则更优,因为其查找时间为O(lgn),譬如数组{1, 2, 3, 4, 5, 6, 7, 8, 9},查找元素6,用二分查找的算法执行的话,其顺序为: 1.第一步查找中间元素,即5,由于5 2.寻找{6, 7, 8,转载 2012-11-12 10:46:59 · 311 阅读 · 0 评论 -
快速排序的非递归实现
首先说明一下快速排序是对冒泡排序的改进。为什么这么说呢?想一下冒泡排序,它把序列分成了两部分,前半部分无序,后半部分升序排列,并且后半部分的数都大于前半部的数。由此可得到快速排序和冒泡排序的一些共同点:都要经历n趟排序每趟排序要经历O(n)次比较都是后半部分元素比前半部大而不同之处就在于冒泡排序的交换操作发生相邻的元素之间,即一趟排序可以要经过多次交换操作;快速排序的交换操作发生在转载 2012-10-18 20:13:45 · 381 阅读 · 0 评论 -
Cache块替换算法LRU
#include"stdio.h"#define N 10#define M 4typedef struct CacheUpdate{ int value; //装入的序列号 int state; //是否装入 int counter;};CacheUpdate Cache[M];int table[M][N]; //用来保转载 2013-03-27 08:48:40 · 1703 阅读 · 0 评论