Visitors hit counter dreamweaver
摘要: 快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序n个项目要Ο(nlogn)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(nlogn) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。(出自维基百科)快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。在这里我采用的是递归调用分区算法把序列划分成两个子序列的方法来实现快排。具体的图例在维基百科里写得非常清楚,一看就明白了。分区算法: 首先寻找任意一个pivo 阅读全文
posted @ 2013-06-15 22:41 Jason Damon 阅读(1029) 评论(0) 推荐(1) 编辑
摘要: 有些经典的算法,我们应该做到信手捏来。一看到某个经典的算法,脑子里马上要想到要怎么解决,最好还要马上动手把他时间出来,不要怕做重复的工作!这就是我以后我要的!信手捏来。随时准备着实现算法!冒泡排序:每次从起始位置开始(j=0),分别比较arr[j]与arr[j+1],若不是降序,则交换位置。这样每轮下来,就可以得到本轮中的最小,放在相应的位置。其实这个算法的关键在于循环的实现,因为每次都可以得此一个最小的,那么下次就不用再对它进行比较了。所以外层循环i每次减少1,可以用来控制循环的范围,内层循环用来控制每次比较。因此冒泡排序总的平均时间复杂度为O(n2)。#include <stdio. 阅读全文
posted @ 2013-06-15 13:48 Jason Damon 阅读(253) 评论(0) 推荐(0) 编辑
摘要: 归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。(出自维基百科)平均时间复杂度Conceptually ,归并算法的基本步骤如下所示: 1)使用递归(recursion)方法把未排序的序列分成n个子序列,每个子序列只包含一个元素(一个元素被认为是有序的); 2)使用归并操作重复合并子序列产生新的序列,直到只剩下一个序列,那么这个序列就是有序的。归并操作(merge) ,也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作。归并排序算法依赖归并操作。归并操作算法描述归并操作的过程如下: 阅读全文
posted @ 2013-06-15 12:35 Jason Damon 阅读(664) 评论(0) 推荐(1) 编辑