摘要: 快速排序是python list的内部函数,但是为了学习快排理论,所以写出该部分的python代码。import randomarr = [ 7,6,5,4,3,2,1]def quicksort(L): if len(L) > 1: pivot = random.randrange(len(L)) elements = L[:pivot]+L[pivot+1:] left = [element for element in elements if element = L[pivot]] return qu... 阅读全文
posted @ 2014-03-28 11:50 ledao 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 题目分析来自“待字闺中”微信公众平台。题目:排序只有1,2,3三个元素的数组,不能统计1,2,3的个数。初学python。第一种方法:__author__ = 'ledao'arr = [2, 1, 1, 3, 1, 1, 3, 3, 2]def findLeftFirstNon1(arr, startPos): for i in xrange(startPos, len(arr)): if 1 != arr[i]: return i print 'Error occurs!' return -1def findRightFirstNon3... 阅读全文
posted @ 2014-03-27 17:28 ledao 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 算法的分析来自与‘待字闺中’微信公众平台利用python语言实现(刚学习python,练习一下)。第一种方法:__author__ = 'ledao'arr = [9, 7, 6, 2, 1, 3, 7]def vally(arr): arrLength = len(arr) if arr[0] = arr[i] and arr[i] = arr[mid] and arr[mid+1] >= arr[mid]: return mid if arr[mid-1] <= arr[mid] and arr[mid] < arr[mid+1]: ... 阅读全文
posted @ 2014-03-25 19:22 ledao 阅读(350) 评论(0) 推荐(0) 编辑
摘要: 题目分析来自“待字闺中”微博公众平台。一个数组,arr = ['a1', 'a2', 'a3', 'a4', 'b1', 'b2', 'b3', 'b4'],变换为:arr = ['a1', 'b1', 'a2', 'b2', 'a3', 'b3', 'a4', 'b4']第一次使用Python编写程序,肯定有许多不妥的地方。第一种方法:__ 阅读全文
posted @ 2014-03-24 11:23 ledao 阅读(203) 评论(0) 推荐(0) 编辑
摘要: #include #include #include #define MAXlen 100/*算法思想简单描述:先将要排序的一组数按某个增量 d分成若干组,每组中记录的下标相差 d。对每组中全部元素进行排序,然后再用一个较小的增量对它进行,在每组中再进行排序。当增量减到 1时,整个要排序的数被分成一组,排序完成。下面的函数是一个希尔排序算法的一个实现,初次取序列的一半为增量,以后每次减半,直到增量为 1,希尔排序是不稳定的。*/void shell_sort(int *x, int n) { // 希尔排序 int h, j, k, t; for (h = n / 2; h > 0; h 阅读全文
posted @ 2013-10-13 09:10 ledao 阅读(1421) 评论(0) 推荐(0) 编辑
摘要: #include #include typedef int TType;typedef struct _TreeNode{ TType elem; struct _TreeNode *left, *right, *parent;}TreeNode;void Insert_BST(TreeNode *T, TType e){ TreeNode *s=(TreeNode *)malloc(sizeof(TreeNode)); s->elem=e; s->left=NULL; s->right=NULL; s->parent=NULL; TreeNode *p=T, *f; 阅读全文
posted @ 2013-10-12 21:01 ledao 阅读(1545) 评论(0) 推荐(0) 编辑
摘要: #include using namespace std;void HeapAdjust(int *A, int s, int m) //下标以1开始{ int temp_first=A[s]; for(int j=2*s;j=A[j]) break; A[s]=A[j]; s=j; } A[s]=temp_first;}void HeapSort(int *A, int len){ for(int i=len/2;i>=1;--i) { HeapAdjust(A, i, len); } ... 阅读全文
posted @ 2013-10-12 19:38 ledao 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 最近老是在想C++的内存控制机制,查了一些资料所以有点想法,自己记录一下免得以后自己忘了。1. 需求在做线性代数的算法时,首要的就实现Matrix这个类。由于Matrix的行列可变化,所以必须使用动态的内存分配。动态的内存分配就必须要考虑内存的申请和释放,以及动态内存在不同对象之间的传递机制。考虑到算法的复杂性,所以在Matrix之外不打算使用指针,以降低算法实现的复杂度。2. 可实现的方法总体上,我能找到的方法有以下2种。利用默认的构造复制构造函数和默认重载以及赋值操作函数动态申请和释放内存和引用计数机制实现不同对象之间对同一块内存的共享,最后只有一个对象负责将动态申请的内存块释放掉,例如O 阅读全文
posted @ 2013-08-29 23:08 ledao 阅读(1216) 评论(0) 推荐(1) 编辑
摘要: C++引用现在分为左值引用和右值引用。其实很好理解,左值引用中的左值指的就是能出现在等号左边的值(带名称的变量,带*号的指针等一类的数据),程序能对这样的左值进行引用获得其地址;右值引用中的右值指的就是出现在等号右边的值(常量数字,或者函数的返回值(不能是左值引用类型),计算式的返回值等匿名不可访问的数据),程序能对这样的右值进行引用获得其地址。也不知道对不对,反正可以简单的理解为:能对其进行赋值操作的都是左值,不能对其进行赋值的都是右值。引入右值引用的目的之一是实现移动语义。移动语义的引入是为了解决在进行大数据复制的时候,将动态申请的内存空间的所有权直接转让出去,不用进行大量的数据移动,既节 阅读全文
posted @ 2013-08-28 23:44 ledao 阅读(3946) 评论(0) 推荐(1) 编辑
摘要: void Swap(int &a,int &b){ int temp=a; a=b; b=temp;}void Perm(vector& list, int k, int m){ if(k==m) { for(int i=0; i<=m; i++) cout << list[i]; cout << endl; } else for(int j=k; j<=m; j++) { Swap(list[k],list[j]); ... 阅读全文
posted @ 2013-08-03 20:26 ledao 阅读(271) 评论(0) 推荐(0) 编辑