C
文章平均质量分 53
taihejin
这个作者很懒,什么都没留下…
展开
-
排序--快速排序算法的思想及其代码实现
快速排序算法是交换排序的一种,其思想就是以数组中的某一元素作为轴元素,以轴元素为准将数组分成两组,其中一组全部小于等于该元素,另一组则大于等于该元素。然后再对两组元素进行递归调用,其主要过程就是分割数组,其代码如下:int partition(int *A,int low,int high){ while(low<high){ while(low=A[low])high--; //e原创 2014-01-06 20:02:56 · 453 阅读 · 0 评论 -
算法--求数组中的最大和最小值
优化后的求最大和最小值的代码如下:int *minMax(int *A,int n){ int min,max,i; if(n&0x01){ min=max=A[0],i=1; }else{ if(A[0]<A[1]) min=A[0],max=A[1]; else min=A[1],max=A[0]; i=2; } for(;i<n-1;i+=2){原创 2014-01-09 16:48:30 · 906 阅读 · 0 评论 -
编程之美--寻找最大的K个数
方法一.先排序然后找出最大的K个数,这里选择快速排序,代码如下:int partition(int *arr,int low,int high){ int key=arr[low]; while(low<high){ while(low=key)high--; arr[low]=arr[high]; while(low<high&&arr[low]<=key)low++;原创 2014-01-12 11:38:09 · 417 阅读 · 0 评论 -
编程之美--子数组的最大乘积
方法一 枚举法,代码如下://求子数组的最大乘积int maxProduct(int *arr,int length){ int max=1,flag=0; //初始化最大值 for(int i=1;i<length;i++) max*=arr[i]; //遍历查找乘积最大的 for(int i=1;i<length;i++){ int product=1; for(int原创 2014-01-14 15:24:10 · 470 阅读 · 0 评论 -
求数组的子数组之和的最小值
本质上与“求数组的子数组之和的最大值”是相同的,只需对求最大值的算法做些修改即可.这里给出一种方法,代码如下:int minSum(int *arr,int length){ int start=arr[length-1]; int all=arr[length-1]; for(int i=length-2;i>=0;i--){ if(start>0) start=0; sta原创 2014-01-15 20:48:23 · 539 阅读 · 0 评论 -
编程之美--求数组的子数组之和的最大值
方法一 枚举法,代码如下:int maxSum(int *arr,int length){ int maxSum=arr[0],curSum=0; for(int i=0;i<length;i++){ for(int j=0;j<length;j++){ curSum=arr[i]; for(int k=i+1;k<=j;k++) curSum+=arr[k];原创 2014-01-15 20:45:10 · 434 阅读 · 0 评论 -
编程之美--求数组的子数组之和的最大值--扩展问题
问题一,如书中提示的那样,对于情形二就是求数组的子数组之和的最小值,实现代码如下:int spanSum(int *arr,int length){ int start=arr[length-1]; int all=arr[length-1]; int sum=all; for(int i=length-2;i>=0;i--){ sum+=arr[i]; if(start>0)原创 2014-01-16 14:34:55 · 482 阅读 · 0 评论 -
全排列算法--一种非递归算法的实现
代码如下:void reverse(char *arr,int start,int end){ while(start<end){ char temp=arr[start]; arr[start]=arr[end]; arr[end]=temp; start++,end--; }}void swap(char *arr,int i,int j){ char temp原创 2014-03-28 16:58:00 · 406 阅读 · 0 评论 -
全排列--递归算法实现
代码如下:void swap(int *x,int *y){ int temp=*x; *x=*y; *y=temp;}void perm(int *arr,int start,int end){ if(start==end){ for(int i=0;i<=end;i++) printf("%d",arr[i]); printf("\n"); } for(in原创 2014-03-30 15:32:43 · 375 阅读 · 0 评论 -
算法--螺旋队列代码实现
最近看了有个螺旋队列的问题,原创 2014-04-20 16:24:44 · 577 阅读 · 0 评论 -
算法导论--二叉查找树--C++实现
#ifndef BSTREE_H#define BSTREE_Htypedef struct Node{ int key; Node *p; Node *left; Node *right;}Node;class BSTree{public: Node *root; BSTree():root(0){} Node *minimum(Node *p); Node *maxi原创 2014-10-03 21:30:50 · 339 阅读 · 0 评论 -
算法--写一个函数检查字符是否是整数,如果是返回其整数值
基础知识补充,对于一个给定的数字字符x,比如x=‘6’,如何求x所对应的数字6呢?我们知道计算机存储字符实际上存储的是其ASCII码,对于字符x=‘6’实际上存储的是ASCII码54,字符‘0’是48,‘1’是49.这样以来,对于任意一个数字字符x我们可以通过x-'0'的方式来求救其对于的数字值. 下面分析一下如何求解字符串对于的数值.不失一般性,我们不妨以str="9652"作为例子原创 2014-01-10 16:38:38 · 890 阅读 · 0 评论 -
算法--选择第K大的数
算法基本思想是对输入的数组进行递归划分,这样得到一个中轴元素pivot,左边数组内的数都小于等于中轴元素pivot,右边的数组都大于等于pivot,然后考察右边边数组加上中轴元素的个数x,若个数x==k,则返回pivot;若x>k,则说明第K大元素在右边数组并且是第k大元素,继续递归查找;若xint random(int x,int y){ if(x>y) return random(y,x原创 2014-01-10 11:02:27 · 834 阅读 · 0 评论 -
编程之美--寻找发帖“水王”的扩张问题--代码实现
编程之美中寻找发帖“水王”一节的扩展问题:随着Tango的发展,管理员发现“超级水王”没有了。统计结果表明,有3个发帖很多的ID,他们的发帖数目都超过了帖子总数目N的1/4。如何从发帖ID列表中快速找到他们的ID?具体的代码实现如下(思想和原问题相同):int *findID(int *ID,int n){ int candidate[3]; int nTimes[3]={0};原创 2014-01-02 19:41:45 · 776 阅读 · 0 评论 -
排序--归并算法思想及其代码实现
调试了一下午时间才把问题搞定,真是“事非经过不知难”void merge(int *A,int *B,int s,int m,int e){ int k=s,t=m+1; while(s<=m&&t<=e){ if(A[s]<A[t]){ B[k++]=A[s++]; }else{ B[k++]=A[t++]; } } while(s<=m) B[k++]=原创 2014-01-06 18:31:48 · 370 阅读 · 0 评论 -
排序--冒泡排序的基本思想及其代码实现
冒泡排序是一种简单的交换排序,其基本思想是第一个记录与第二个记录相比较,若大于则交换,然后用第二个记录与第三个记录比较,若大于则交换,直到第n-1个和第n个比较完毕,则最大的记录一定在第n个上。这个过程称为一趟冒泡排序,下一趟对第一个到第n-1个进行冒泡排序,原因很显然第n个记录在第一趟排序中已经确定是最大的,无需再变动。其代码实现如下:void sort(int *A,int n){ fo原创 2014-01-06 13:30:21 · 821 阅读 · 0 评论 -
排序--直接插入排序思想及代码实现
直接插入排序的基本思想是将一个记录插入到已排好序的有序表中从而得到一个新的记录数增一的有序表,代码实现如下:void insertSort(int *A,int n){ int i,j; for(i=1;i<n;i++){ int key=A[i]; for(j=i-1;j>=0 && key<A[j] ; j--){ A[j+1]=A[j]; } A[j+1]=ke原创 2014-01-06 12:48:25 · 469 阅读 · 0 评论 -
排序--计数排序思想及其代码实现
计数排序是一种很有意思的排序,但是其输入数据有严格的要求,其一每个元素都必须是整数,其二每个元素需是大于或等于0的整数,其代码实现如下:void countingSort(int *A,int n,int k){ int *C=new int[k+1]; int *B=new int[n]; for(int i=0;i<=k;i++) C[i]=0; for(int i=0;i<n原创 2014-01-06 20:42:22 · 468 阅读 · 0 评论 -
排序--简单选择排序思想及其代码实现
简单选择排序的基本思想是:每一趟在n-i+1个记录中选取关键字最小的记录作为有序序列的中第i个记录,其代码实现如下:void selectSort(int *A,int n){ for(int i=0;i<n-1;i++){ int index=i; for(int j=i+1;j<n;j++){ if(A[j]<A[index]) index=j; } if(原创 2014-01-07 13:06:11 · 458 阅读 · 0 评论 -
编程之美--最大公约数问题--递归和非递归
编程之美中的最大公约数问题,下面通过代码依次实现之.解法一、欧几里得的辗转相除法int gcd(int x,int y){ return (!y)?x:gcd(y,x%y);}解法二、辗转相减法int gcd(int x,int y){ if(x<y) return gcd(y,x); return (!y)?x:gcd(y,x-y);}解法三、改进的使用移位缩小空间的算原创 2014-01-07 15:10:38 · 678 阅读 · 0 评论 -
编程之美--”求二进制数中1的个数问题“深入研究--汉明重量(Hamming weight)
最近又看了这个问题,其实这是一个在信息论、密码学以及信息安全中非常重要的知识---汉明重量(Hamming weight).对于这个问题维基百科上有明确详细的解释和定义,并给出了高效的实现方法.记得看在编程之美中看到这个问题的时候,感觉那四种方法就很厉害了,想不到其实那都是相对简单的方法,真正高效的方法还在后面!方法一 移位、与和相加基本思想就是每两位相加把和存入这两位中,然后以每两位原创 2014-01-08 16:51:42 · 840 阅读 · 0 评论 -
排序--堆排序的基本思想及其代码实现
堆有两种:最大堆和最小堆(小根堆).在这两种堆中,结点内的数值都要满足堆特性,其细节则视堆的种类而定. 在最大堆中,最大堆特性是指除了跟以外的每个结点i,有 A[parent(i)]>=A[i]即某个结点的值至多是和其父结点的值一样大.这样,堆中的最大元素就存放在根节点中;并且,在以某个结点为根的子树中,各结点的值都不大于该子树根结点的值。一、保持最大堆的性质的代码原创 2014-01-07 13:17:59 · 608 阅读 · 0 评论 -
C语言--随机数函数的使用
C语言随机数函数的使用如下:#include#include#include int random(int x,int y){ if(x>y) return random(y,x); srand((unsigned int) time(0)); return rand()%(y-x+1)+x;}一定注意别忘了头文件的引用。原创 2014-01-09 18:46:02 · 698 阅读 · 0 评论 -
编程之美--数组循环移位
解法一 每次移动移位,然后循环调用K次:void shift(int *A,int n,int k){ for(int i=0;i<k;i++){ int last=A[n-1]; for(int j=n-1;j<0;j--) A[j]=A[j-1]; A[0]=last; }}解法二 优化循环次数,即求K对n的余数:void shift(int *A,int原创 2014-01-09 17:02:22 · 528 阅读 · 0 评论 -
编程之美--寻找发帖“水王”--代码实现
感觉编程之美中寻找发帖“水王”一节比较有意思,遂编码实现了,代码如下:int find(double ID[],int n){ int candidate; int nTimes,i; for(i=nTimes=0;i<n;i++) { if(nTimes==0){ candidate=ID[i],nTimes=1; }else{ if(candidate==ID[i原创 2014-01-02 17:12:05 · 438 阅读 · 0 评论 -
hashtable实现 -- 参考leveldb hashtable
1. hashtable.h#ifndef HASHTABLE_H #define HASHTABLE_H #include #include #include #include struct Handle { std::s原创 2015-10-16 11:40:43 · 639 阅读 · 0 评论