多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > 數據結構常用算法

數據結構常用算法

來源:程序員人生   發布時間:2014-09-26 08:00:01 閱讀次數:3174次
//漢諾塔 void Hanoi(int n,string A,string B,string C){ if(n == 1) cout<<A<<"->"<<C<<endl; else{ Hanoi(n-1,A,C,B); cout<<A<<"->"<<C<<endl; Hanoi(n-1,B,A,C); } } //遞歸實現 int maxNUm(int num[],int n){ if(1 == n) return num[0]; else { int tem = maxNUm(num,n-1); return (tem > num[n-1]) ? tem : num[n-1]; } } int addNum(int num[],int n){ if(1 == n) return num[0]; else { return num[n-1] + addNum(num,n-1); } } int av(int num[],int n){ if(1 == n)return num[0]; else { return ((n-1)*av(num,n-1) + num[n-1])/n; } } void pai(int num[],int m,int n){ int j,tem; if(0 == m){ for (j = 0;j < n;++j) { cout<<num[j]<<" "; } cout<<endl; } else { for (j = 0;j<=m;++j) { tem = num[m]; num[m] = num[j]; num[j] = tem; pai(num,m-1,n); tem = num[m]; num[m] = num[j]; num[j] = tem; } } } void getNext(char *p,int *next){ int j,k; next[0] = -1; j = 0; k = -1; int b1 = strlen(p); while (j < strlen(p) -1) { if(k ==-1 || p[j] == p[k] ) { ++j; ++k; next[j] = k; }else k = next[k]; } } int KEMMatch(char *t,char *p){ int *next = new int(strlen(p)); getNext(p,next); int i = 0; int j = 0; while (i < strlen(t)) { if(j == -1 || t[i] == p[j]) { ++i; ++j; }else { j = next[j]; } if(j == strlen(p)) return i - strlen(p); } return -1; } /**********************************************************/ //堆插入 //堆插入 void constructHeap(int a[],int n,int value){ a[n] = value; int j,temp = value; j = (n-1)/2; while (j>=0 && n!=0) { if(a[j] <= temp) break; a[n] = a[j]; n = j; j = (n-1)/2; } a[n] = temp; } //堆更新 void UpdataHeap(int a[],int index,int n) { int j,temp = a[index]; j = 2*index + 1; while (j < n) { if(j+1 < n && a[j+1] < a[j]) ++j; if(a[j] >= temp) break; a[index] = a[j]; index = j; j = index*2 +1; } a[index] = temp; } void HeapDelete(int a[],int n){ swap(a[0],a[n-1]); UpdataHeap(a,0,n-1); } //數組堆化 void MakeHeap(int a[],int n){ for (int i = n/2-1; i>=0; --i) { UpdataHeap(a,i,n); } } //堆排序 void HeapSort(int a[],int n){ for (int i=n-1; i>=1; --i) { swap(a[0],a[i]); UpdataHeap(a,0,i); } } /*********************************/ /*給定一數組a[N],我們希望構造數組b [N],其中b[j]=a[0]*a[1]…a[N-1] / a[j],在構造過程中,不允許使用除法: 要求O(1)空間復雜度和O(n)的時間復雜度; 除遍歷計數器與a[N] b[N]外,不可使用新的變量(包括棧臨時變量、堆空間和全局靜態變量等); */ void getB(int a[],int b[],int n){ b[0] = 1; int i; for (i = 1;i<n;++i) { b[i] = b[i-1] * a[i-1]; } for (i = n-1;i>=1;--i) { b[i] *= b[0]; b[0] *= a[i]; } } /*************************************/ //冒泡排序 void BubbleSort(int a[],int n){ int i,j; int flag = true; for ( i = 0;i < n;++i) { flag = false; for (j = 1;j < n-i;++j) { if(a[j-1] > a[j]) swap(a[j-1],a[j]); flag = true; } if(!flag) break; } } /*************************************/ //插入排序 void InsertSort(int a[],int n){ int i,j,temp; for (i = 1;i<n;++i) { if(a[i] < a[i-1]){ temp = a[i]; j = i; do { a[j] = a[j-1]; --j; } while (j>=1 && temp<a[j-1]); a[j] = temp; } } } /*************************************/ //希爾排序 void ShellSort(int a[],int n){ int i,j,temp,gap; gap = n; do { gap = gap/3 +1; for (i = gap;i < n;++i) { if(a[i] < a[i-gap]){ temp = a[i]; j = i; do { a[j] = a[j-gap]; j -= gap; } while (j>=gap && temp < a[j-gap]); a[j] = temp; } } } while (gap > 1); } /*************************************/ //快速排序 void QuikSort(int a[],int l,int r){ if(l < r) { int i = l,j = r,tem = a[l]; while (i < j) { while (i<j && a[j] >= tem) --j; if(i < j) a[i++] = a[j]; while (i < j && a[i] <= tem) ++i; if(i < j) a[j--] = a[i]; } a[i] = tem; QuikSort(a,l,i-1); QuikSort(a,i+1,r); } } /*************************************/ //選擇排序 void SelectSort(int a[],int n){ int i,j,k; for (i = 0;i<n-1;++i) { k = i; for (j = i+1; j<n;++j) { if (a[j] < a[k]) k = j; } if(i != k)swap(a[i],a[k]); } } /*************************************/ //斐波那契數列 long Fibonacci1(int n){ if(0 == n) return 0; else if(1 == n) return 1; else if(n > 1) return Fibonacci1(n-1) + Fibonacci1(n-2); else return -1; } long fab2(int in){ int x = 0,y = 1,i; for(i=2;i<=in;i++){ y = x + y; x = y - x; } return y; }; /************************************/ //給定整數sum,在亂序數組中尋找所有滿足x+y=sum的組合 void sumN(int a[],int n,int value){ QuikSort(a,0,n-1); int i = 0,j = n-1; while (i < j) { if((a[i] + a[j]) == value) { cout<<a[i]<<"+"<<a[j]<<endl; ++i; --j; }else if((a[i] + a[j]) < value) ++i; else --j; } } /************************************/ //尋找在數組中最大的K個數 //堆插入 void constructHeap(int a[],int n,int value){ a[n] = value; int j,temp = value; j = (n-1)/2; while (j>=0 && n!=0) { if(a[j] <= temp) break; a[n] = a[j]; n = j; j = (n-1)/2; } a[n] = temp; } //堆更新 void UpdataHeap(int a[],int index,int n) { int j,temp = a[index]; j = 2*index + 1; while (j < n) { if(j+1 < n && a[j+1] < a[j]) ++j; if(a[j] >= temp) break; a[index] = a[j]; index = j; j = index*2 +1; } a[index] = temp; } void MaxK(int a[],int n,int k){ int i; int *temp = new int[k]; for (i=0;i<n;++i) { if(i < k) constructHeap(temp,i,a[i]);//先構造k堆 else { if (temp[0] < a[i]) { temp[0] = a[i]; UpdataHeap(temp,0,k);//更新k堆; } } } for (i=0;i<k;++i) { cout<<temp[i]<<" "; } delete []temp; } /************************************/

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 波多野结衣在线观看一区二区三区 | 亚洲视频免费在线播放 | 国产美女无遮挡免费视频 | 国产一区二区三区四区在线观看 | 一区二区在线不卡 | 性加拿大高清xxxxx | 国产国语一级毛片在线放 | 日韩久久中文字幕 | 亚洲码在线中文在线观看 | 中文字幕免费观看视频 | 爱爱免费网站 | 国产91极品福利手机观看 | 激情小说 校园春色 | 亚洲欧美激情精品一区二区 | 亚洲专区在线播放 | 欧美黑人xxxx猛牲大交 | 欧日韩一区二区三区 | 国产精品亚洲欧美 | 99视频精品全部在线播放 | 国产毛片在线视频 | 日本高清免费视频色www | 国产在线视频一区二区三区 | 欧美精品人爱a欧美精品 | 亚洲视频久久 | 最近的中文字幕视频大全高清 | 天天做夜夜做久久做狠狠 | 亚洲欧洲精品视频在线观看 | 亚洲国产成人久久一区www妖精 | 亚洲国产片在线观看 | 手机看片国产欧美日韩高清 | 亚洲欧美国产精品久久久 | 国产精品揄拍一区二区 | 性生生活三级视频在线观看 | 婷五月综合 | 最近最新免费中文字幕高清 | 欧美视频在线观看视频 | 欧美极品jiizzhd欧美 | 在线免费午夜视频 | 亚洲永久精品一区二区三区 | 永久免费在线播放 | 亚洲小说春色综合另类网蜜桃 |