算法
文章平均质量分 63
1054512666
在读学生
展开
-
桶排序
#include 2 #include 3 4 using namespace std; 5 6 struct Node 7 { 8 double value; 9 Node *next; 10 }; 11 //桶排序主程序 12 void bucketSort(double* arr, in原创 2013-06-03 22:12:34 · 611 阅读 · 0 评论 -
寻找逆序对的算法,要求运行时间为O(nlgn),算法导论答案
#include int merge_inversion(int A[],int p,int q,int r){int n1,n2,i,j,k,num=0;n1=q-p+1;n2=r-q;int L[10],R[10];for(i=0;i!=n1;++i)L[i]=A[p+i];for(j=0;j!=n2;++j)R[j]=A[q+j+1];L[n1]=原创 2013-07-23 23:54:41 · 1075 阅读 · 0 评论 -
用斯特拉森算法求解矩阵乘法
#include #define N 2//matrix + matrixvoid plus( int t[N/2][N/2], int r[N/2][N/2], int s[N/2][N/2] ){int i, j;for( i = 0; i {for( j = 0; j {t[i][j] = r[i][j] + s[i][j];}原创 2013-07-30 12:07:20 · 2296 阅读 · 0 评论 -
同时找出数组的最大值和最小值,要求时间复杂度为o(n)
#include void max_min(int A[],int n,int& max,int& min){int i;if(n%2==0){if(A[0]>A[1]){max=A[0];min=A[1];}else{max=A[1];min=A[0];}for(i=2;i{if(A[i]>A[i+1]){i原创 2013-08-05 20:31:21 · 7309 阅读 · 0 评论 -
快速排序的随机化算法
//快速排序的随机化算法#include #include #define N 10//Exchange the valuevoid swap(int *p,int *q){int temp;temp=*p;*p=*q;*q=temp;}//generate a random number between p and qint rando原创 2013-07-30 22:17:50 · 640 阅读 · 0 评论 -
堆排序C语言实现 算法导论
//Heap_sort#include int Left(int i)//return left child{return 2*i+1;}int Right(int i)//return right child{return 2*i+2;}void swap(int *p1,int *p2){int temp;te原创 2013-08-04 17:11:05 · 665 阅读 · 0 评论 -
归并排序(使用哨兵元素)
//归并排序算法# includevoid Merge(int A[],int p,int q,int r){int n1=q-p+1,n2=r-q,i,k,j;int r1[10],r2[10];for(i=0;ir1[i]=A[p+i];for(i=0;ir2[i]=A[q+i+1];r1[n1]=1000,r2[n2]=1000;for(k=p,i原创 2013-05-07 22:16:34 · 2588 阅读 · 0 评论 -
快速排序
//快速排序思想:它是采用分治模式的,通过一趟排序将待排记录分割成独立的两部分,其中一部分的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序。# includevoid swap(int *p1,int *p2){int temp;temp=*p1;*p1=*p2;*p2=temp;}int Partition(int *A,int p,int原创 2013-05-12 23:23:06 · 599 阅读 · 0 评论 -
从一个数组中找出第k小元素的随机化算法 c语言实现 算法导论第九章
//Randomized_select,select a particular number from an array in linear time#include #include void swap(int *p,int *q)//交换元素{int temp;temp=*p;*p=*q;*q=temp;}int Random(int p,int r)/原创 2013-08-05 21:45:44 · 1625 阅读 · 0 评论 -
算法导论15.1 装配线调度问题
//15.1装配线调度问题#include using namespace std;#define I 2#define J 6int a[I+1][J+1],e[I+1],x[I+1],t[I+1][J+1],n=J;int f[I+1][J+1],l[I+1][J+1],rf,rl;void Input()//输入{ int i,j; for(i=1;i<=I;++i原创 2013-09-03 10:02:16 · 1032 阅读 · 0 评论 -
15.2 矩阵链乘法
//15.2矩阵链乘法# include using namespace std;#define Length 7int P[7],M[7][7],S[7][7];void Input()//输入矩阵的维数{ int i; for(i=0;i<7;++i) cin>>P[i];}void Matrix_Chain_Order()//求矩阵的链乘法序列{ int i原创 2013-09-03 20:32:59 · 486 阅读 · 0 评论 -
算法导论15.4 最长公共子序列
//15.4最长公共子序列#include #include using namespace std;int c[8][7];int b[8][7];#define x 8#define y 7void Lcs_Length(char s1[x],char s2[y])//求解最长公共序列{ int i,j; for(i=1;i<x;++i) c[i][0]=0; f原创 2013-09-05 11:08:06 · 828 阅读 · 0 评论 -
删除有序数组中重复元素的一个非常简洁的算法
#include int removeDuplicate( int* source, const int size ){ int curPos = 1; for( int i = 1; i if( source[i] != source[i-1] ) source[curPos++] = source[i]; return size原创 2013-07-22 22:52:09 · 1028 阅读 · 0 评论 -
算法导论2.3-5答案 分别采用递归与非递归方式实现二分查找 c++实现
//2.3-5 采用递归方式的二分查找,注意输入的数组是有顺序的#include #include using namespace std;vector::size_type Binary_Search(vector A,int key,vector::size_type first,vector::size_type last){if(first>last)r原创 2013-07-20 10:51:41 · 886 阅读 · 0 评论 -
归并排序 (不采用哨兵) 算法导论2.3-2答案
# include#define NULL 0void mergearray(int a[], int first, int mid, int last, int temp[]) { int i = first, j = mid + 1; int m = mid, n = last; int k = 0; w原创 2013-07-19 16:35:35 · 1331 阅读 · 0 评论 -
算法导论课后题 2.3-7答案
题目:请给出一个运行时间为O ( n lg n ) 的算法,使之能在给定一个由n个整数构成的集合S和另一个整数x时,判断出S中是否存在有两个其和等于x的元素。解决该问题的算法如下:1.对S中的元素进行排序(需要运行时间为O ( n lg n ) 的算法);2.构造一个集合S'={{ z : z = x − y }.(其中x我们要判断的元素,y为S中的所有元素);3.对S'中的元素进原创 2013-07-22 22:33:26 · 1228 阅读 · 0 评论 -
基数排序 C语言实现
//Radix_Sort#include #include /*被排序元素的最大位数,4则意味着只能排序#define WIDTH 4 #define MAXK 10 //位数划分基于的基数,10表示为10进制划分void radixSort(int a[], int n) {int i;void innerCountingSort(int a[],原创 2013-08-04 23:01:17 · 1209 阅读 · 1 评论 -
利用矩阵求解fibonacci数列 时间复杂度为O(lgn)
//利用矩阵求解fibonacci数列#include #include ///////////////////////////////////////////////////////////////////////// A 2 by 2 matrix////////////////////////////////////////////////////////////////原创 2013-07-30 10:46:22 · 929 阅读 · 0 评论 -
迷宫问题求解
Status MazePath(PosType start,PosType end) /* 算法3.3 */ { /* 若迷宫maze中存在从入口start到出口end的通道,则求得一条 */ /* 存放在栈中(从栈底到栈顶),并返回TRUE;否则返回FALSE */ SqStack S; SElemType e; PosType curpos; Ini转载 2013-04-05 20:00:56 · 752 阅读 · 0 评论 -
插入排序算法
//插入排序# includevoid Insertion_Sort(int A[],int n){ int i,key,j; for(i=1;i { key=A[i]; j=i-1; while(j>=0&&A[j]>key) { A[j+1]=A[j]; j--; } A[j+1]=key;//此处不可以用A[i],因原创 2013-05-06 15:39:37 · 606 阅读 · 0 评论 -
冒泡排序及其改进算法
//1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。//2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。//3.N=N-1,如果N不为0就重复前面二步,否则排序完成。/*# includevoid Bubble_Sort(int A[],int n){int i,j,temp;原创 2013-05-09 10:59:25 · 868 阅读 · 0 评论 -
堆排序算法
//堆排序# includeusing namespace std;void swap(int *p1,int *p2);void Adjust_Max_Heap(int *datas,int pos,int len);void Build_Max_Heap(int *datas,int len);void Heap_Sort(int *datas,int len);v原创 2013-05-12 17:28:52 · 665 阅读 · 0 评论 -
计数排序
//计数排序# includevoid Count_Sort(int A[],int len,int B[],int k){int c[10];for(int i=0;i{c[i]=0;}//c[i]包含等于i的元素个数for(int j=1;j{c[A[j]]=c[A[j]]+1;}//c[i]为包含小于或等于i的元素个数for(i=1原创 2013-06-04 21:24:01 · 498 阅读 · 0 评论 -
基数排序
//为什么不从高位到低位排序,首先输入的所有的数中的各个数的位数不一定相同,只通过对高位进行一次排序是不行的,#include using namespace std;const int base=10;//struct wx{ int num; wx *next; wx() {原创 2013-06-05 22:30:28 · 740 阅读 · 0 评论 -
算法导论第二版2.2-2 答案
#include #include using namespace std;int main(){vector A;int x;coutwhile(cin>>x)A.push_back(x);for(vector::size_type i=0;i{int m=i;for(vector::size_type j=i+1;j{if原创 2013-07-19 09:37:42 · 1303 阅读 · 0 评论 -
贪心算法解决部分背包问题 在O(lgn)时间内
//16.2-6 部分背包问题#include using namespace std;struct Object//物品信息结构体{ int weight;//物品重量 int value;//物品价值 float num;//可以装入的物品数量 int avl;//物品的单位价值};void swap(Object *p,Object *q)//交换两个元素{ Ob原创 2013-09-19 19:00:58 · 2666 阅读 · 0 评论