随笔分类 -  每日算法

摘要:1、基本思想 通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应的位置并插入。 插入排序非常类似于整扑克牌,在开始摸牌时,左手是空的,牌面朝下放在桌上。接着,一次从桌上摸起一张牌,并将它插入到左手一把牌中的正确位置上。为了找到这张牌的正确位置,要将它与手中已有的牌从右到左地进... 阅读全文
posted @ 2014-11-30 22:07 WhoAmMe 阅读(377) 评论(0) 推荐(0)
摘要:这里记录一下各种排序算法的比较和特性,主要摘自维基百科稳定的冒泡排序(bubble sort) — O(n2)鸡尾酒排序(Cocktail sort, 双向的冒泡排序) — O(n2)插入排序(insertion sort)— O(n2)桶排序(bucket sort)— O(n); 需要 O(k) 额外空间计数排序(counting sort) — O(n+k); 需要 O(n+k) 额外空间合并排序(merge sort)— O(nlogn); 需要 O(n) 额外空间原地合并排序— O(n2)二叉排序树排序 (Binary tree sort) — O(nlogn)期望时间; O(n2) 阅读全文
posted @ 2013-01-23 23:43 WhoAmMe 阅读(363) 评论(0) 推荐(0)
摘要:排序逻辑:每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。选择排序是不稳定的排序方法。n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果:①初始状态:无序区为R[1..n],有序区为空。②第1趟排序在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。……③第i趟排序第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中选出关键字最小 阅读全文
posted @ 2013-01-23 23:33 WhoAmMe 阅读(254) 评论(0) 推荐(0)
摘要:从事PHP工作已经有二年多了,在从事PHP工作中发现要自己去使用基础算法的情况很少,大多数是使用别人已经做好的类库,但是作为一名码农,算法是应该熟练掌握的基础功力之一,所以从今天起,开始复习数据结构和算法,重新拾起大学时代的计算机基础课。今天就开始排序算法-冒泡排序开始。 在开始冒泡排序算法之前,先了解几个概念: 1、算法复杂度:算法复杂度分为时间复杂度和空间复杂度。 (1)时间复杂度:是度量算法执行的时间长短; 1)时间频度:一个算法中的语句执行次数称为语句频度或时间频度。记为T(n) 一般情况下,算法的基本操作重复执行的次数是模块n的某一个函数f(n)... 阅读全文
posted @ 2013-01-21 22:07 WhoAmMe 阅读(416) 评论(0) 推荐(0)