摘要: 1->比如给你一个数组,里面的数有200个,最大的数是1000,时间效率的重要性高于空间效率,那么你会采用哪种排序策略呢?能否达到O(n)思路:对于这种问题,可能我们会想到很多种排序方法,冒泡排序,快速排序,希尔排序,堆排序,插入排序,选择排序以及归并排序;可是仔细想想他们的时间复杂度:冒泡排序中第n个数据分别比较n-1次,时间复杂度是O(n^2);复杂度太高;快速排序,也是基于分治的思想,他的每次划分都至少把一个元素放在正确位置上,基本有序时间复杂度为O(n^2),最好情况O(nlogn);希尔排序,需要定义步长的排序方法,对于大数据量的排序,比插入排序效率高很多,最好时间复杂度O(n 阅读全文
posted @ 2013-07-25 23:24 ..孔雀翎.. 阅读(711) 评论(0) 推荐(0) 编辑
摘要: 1->链表的翻转typedef struct List{ int val; List * next;}LinkList;reverse(LinkList *head){ LinkList *temp = head->next; LinkList *pre = head; LinkList *next = head ->next->next; for(next != NULL) { temp ->next = pre; pre = temp; temp = next; next = next->next;... 阅读全文
posted @ 2013-07-25 23:06 ..孔雀翎.. 阅读(237) 评论(0) 推荐(0) 编辑
摘要: 归并排序最差运行时间是O(nlogn),它是利用递归设计程序的典型例子。采用分治的思想。归并排序的最基础的操作就是合并两个已经排好序的序列。假设我们有一个没有排好序的序列,那么首先我们使用分割的办法将这个序列分割成一个一个已经排好序的子序列。然后再利用归并的方法将一个个的子序列合并成排序好的序列。分割和归并的过程如下: 1 4 3 5 2 6 / \ 1,4,3 5,2,6 / \ / \ 1,4 3 5,2 6 / / \ / / \... 阅读全文
posted @ 2013-07-25 22:32 ..孔雀翎.. 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 二叉树的中序遍历->递归算法:typedef struct node_t{ char *value; node_t *left; node_t *right;}*tree, node;void traverse(tree root, void (*visit)(node)) { if(root != NULL) { traverse(root->left, visit); visit(root); traverse(root->right, visit); }}二叉树中序遍历->非递归算法:typedef struct n... 阅读全文
posted @ 2013-07-25 20:45 ..孔雀翎.. 阅读(207) 评论(0) 推荐(0) 编辑