摘要:
闲着没事,做个小小的测试,测试一下冒泡,选择,插入和快速四种排序对同一个含有1000000个元素的数组排序所用的时间,做个比较。四种排序的代码如下:冒泡排序:template <typename T>
void bubble_sort(T a[], int num){ if(num ==0 || num == 1) return ; bool changed = false; do{ for(int i=0; i<num-1; i++){ if(a[i] < a[i+1]){ swap(a[i], a[i+1]); changed = true; }
... 阅读全文
摘要:
快速排序是一种效率很高的排序,具有最好nlogn,最坏n2的复杂度,总的来说,快排的效果是非常好的,如果有兴趣研究算法性能的分析,推荐阅读《算法导论》,我在这里就不分析了,也分析不明白。总之,它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。举个例子:a[5] = {4, 2, 5, 3, 1}假如选第一个元素为分割元素,第一趟排序之后的序列为:2 3 1 4 5左边的序列为(左一)2 3 1右边的序列为(右一)5递归排序左右两序 阅读全文
摘要:
list将元素按顺序储存在链表中. 与向量(vector)相比, 它允许快速的插入和删除,但是随机访问却比较慢. list提供如下三种构造函数:list<T> l1;list<T> l2(l1);list<T> l3(b, e);b,e是指定范围的两个迭代器list提供如下的接口函数,具体实现及函数原型请参阅其他帮助文档assign() 给list赋值 back() 返回最后一个元素 begin() 返回指向第一个元素的迭代器 clear() 删除所有元素 empty() 如果list是空的则返回true end() 返回末尾的迭代器 erase() 删除一 阅读全文
摘要:
Vectors 包含着一系列连续存储的元素,其行为和数组类似。访问Vector中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特定值的元素所处的位置或是在Vector中插入元素则是线性时间复杂度。vector定义了五种构造函数分别是:vector<T> v1;vector<T> v2(v1);vector<T>v3(b, e)vector<T> v4(n, i);vector<T> v5(n);vector包含如下接口函数,如需详细了解,请参阅相关帮助文档Constructors 构造函数 Operators 对ve 阅读全文
摘要:
选择排序是一种不稳定的排序方法,排序思想比较简单,大致可描述为:每次在待排序元素中选出最小元素,放到前面,如此下去,每次选出的都是剩余元素的最小元素,直至待排序元素只剩一个时,排序结束,演示过程如下:设待排序有n个元素,分别为[1...n],未排序时,有序区元素个数为零,无序区元素个数为n。以五个元素为例,a[5] = {5, 4, 3, 2, 1}第一趟排序从无序区选出最小元素为1,与无序区第一个元素5交换,得到序列1 4 3 2 5这时1为有序区,4 3 2 5为无序区第二趟排序在新的无序区中选出最小元素为2,与无序区的第一个元素4交换,得到序列1 2 3 4 5这时1 2为有序区,3 4 阅读全文
摘要:
书接上文,谈谈简约设计的第一个方面:删除。为什么要删除呢,因为很多功能是没有用的,说到这,可能会有人反驳,没有用为什么还要加到软件里呢,那不是没事找事吗。我说的功能没用分两个方面,一方面是真的没用,一方面是对于普通用户来说没有用。对于第一种,真的没有用的功能,是必须要删除的,因为这种功能对用户来说就是一种迫害,本来没有用,还要人家学,这不有病吗。那么,这种功能是怎么来的呢,多数是因为设计者的一厢情愿,他们总是想让自己的软件能有很多的功能,能做很多的事情,还总是打着用户的名义,假如用户需要这个功能呢,假如用户需要那个功能呢,其实大多数用户,对软件的要求很简单,能做我想要让他做的事情就可以了,用户 阅读全文