zoukankan      html  css  js  c++  java
  • 常用算法合集(一)

    常用算法合集(一)

    查找算法

    顺序查找

    #include <iostream>
    using namespace std;
    
    int SeqSearch2(int r[], int n, int k)
    {
    	int i=n;
    	r[0]=k;
    	while(r[i]!=k)
    		i--;
    	return i;
    }
    

    字符串匹配

    BF算法

    #include <iostream>
    using namespace std;
    
    int BF(char S[], char T[])
    {
    	int index=0;
    	int i=0, j=0;
    	while((S[i]!='')&&(T[j]!=''))
    		if(s[i]==T[j]) {i++;j++;}
    		else {index++; i=index; j=0;}
    	if(T[j]=='') return index+1;
    	else return 0;
    }
    

    KMP算法

    #include <iostream>
    #include <stdio.h>
    using namespace std;
    
    void GetNext(char T[], int next[])
    {
    	int i, j, len;
    	for(j=0; T[j]!=''; j++)
    	{
    		for(len=j-1;len>=1; len--)
    		{
    			for(i=0; i<len; i++)
    				if(T[i]!=T[j-len+i]) break;
    			if(i==len)
    			{
    				next[j]=len;
    				break;
    			}
    		}
    		if(len<1) next[j]=0;
    	}
    }
    
    int KMP(char S[], char T[])
    {
    	int i=0, j=0;
    	int next[80];
    	GetNext(T, next);
    	while(S[i]!=''&&T[j]!='')
    	{
    		if(S[i]==T[j])
    		{
    			i++;
    			j++;
    		}
    		else
    		{
    			i=next[j];
    			if(j==-1)
    			{
    				i++;
    				j++;
    			}
    		}
    	}
    	if(T[j]=='') return (i-strlen(T)+1);
    	else return 0;
    }
    

    排序算法

    选择排序

    #include <iostream>
    using namespace std;
    
    void SelectSort(int r[], int n)
    {
    	int i, j, index, temp;
    	for(i=0; i<n-1;i++)
    	{
    		index=i;
    		for(j=i+1; j<n; j++)
    			if(r[j]<r[index]) index=j;
    		if(index!=i)
    		{
    			temp=r[i];
    			r[i]=r[index];
    			r[index]=temp;
    		}
    	}
    }
    

    起泡排序

    #include <iostream>
    using namespace std;
    
    void BubbleSort(int r[], int n)
    {
    	int bound, exchange=n-1;
    	while(exchange!=0)
    	{
    		bound=exchange; exchange=0;
    		for(int j=0; j<bound; j++)
    			if(r[j]>r[j+1])
    			{
    				int temp = r[j];
    				r[j] = r[j+1];
    				r[j+1] = temp;
    				exchange = j;
    			}
    	}
    }
    

    归并排序

    #include <iostream>
    using namespace std;
    
    void Merge(int r[], int r1[], int s, int m, int t)
    {
    	int i=s, j=m+1, k=s;
    	while(i<=m&&j<=t)
    	{
    		if(r[i]<=r[j]) r1[k++]=r[i++];
    		else r1[k++]=r[j++];
    	}
    	while(i<=m)
    		r1[k++] = r[i++];
    	while(j<=t)
    		r1[k++] = r[j++];
    }
    
    void MergeSort(int r[], int s, int t)
    {
    	int m, r1[1000];
    	if(s==t) return;
    	else
    	{
    		m=(s+t)/2;
    		MergeSort(r, s, m);
    		MergeSort(r, m+1, t);
    		Merge(r, r1, s, m, t);
    		for(int i=s; i<=t; i++)
    			r[i]=r1[i];
    	}
    }
    

    快速排序

    #include <iostream>
    using namespace std;
    
    void Partition(int r[], int first, int end)
    {
    	int i=first, j=end;
    	while(i<j)
    	{
    		while(i<j&&r[i]<=r[j]) j--;
    		if(i<j)
    		{
    			int temp=r[i];
    			r[i]=r[j];
    			r[j]=temp;
    			i++;
    		}
    		while(i<j&&r[i]<r[j]) i++;
    		if(i<j)
    		{
    			int temp=r[i];
    			r[i]=r[j];
    			r[j]=temp;
    			j--;
    		}
    	}
    	return i;
    }
    
    void QuickSort(int r[], int first, int end)
    {
    	int pivot;
    	if(first<end)
    	{
    		pivot = Partition(r, first, end);
    		QuickSort(r, first, pivot-1);
    		QuickSort(r, pivot+1, end);
    	}
    }
    

    最近对问题

    #include <iostream>
    using namespace std;
    
    void ClosestPoints(int x[], int y[], int n)
    {
    	int index1, index2;
    	int d, minDist=1000;
    	for(int i=0; i<n-1; i++)
    		for(int j=i+1; j<n; j++)
    		{
    			d=(x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]);
    			if(d<minDist)
    			{
    				minDist=d;
    				index1=i; index2=j;
    			}
    		}
    	// 最近点对为 index1, index2 
    	return minDist;
    }
    

    凸包问题

    #include <iostream>
    using namespace std;
    
    void ConvexHull(int x[], int y[], int n)
    {
    	int i, j, k, sign1, sign2;
    	int A, B, C;
    	for(i=0; i<n-1; i++)
    		for(j=i+1; j<n; j++)
    		{
    			sign1=0; sign2=0;
    			A=y[i]-y[j]; B=x[j]-x[i];
    			C=x[i]*y[j]-x[j]*y[i];
    			for(k=0; k<n; k++)
    			{
    				if(k!=i&&k!=j)
    				{
    					if(A*x[k]+B*y[k]+c>0) sign1=1;
    					else sign2=1;
    					if(sign1==sign2) break;
    				}
    			}
    			//if(k==n)
    			//	极点为(i,j) 
    		}
    }
    
  • 相关阅读:
    关于跨域策略文件crossdomain.xml文件
    fl.motion SDK包下载,可用来设置显示对象的连读、饱和度、色调、对比度
    ActionScript工程如何使用Flash CS的fl包中的UI组件(转)
    无法将 flash.display::BitmapData 转换为 flash.display.Bitmap
    服务器托管
    男人会为女人改变多少
    AS3组件之Slider滑块拖动条
    jQuery验证使用
    十进制、十六进制、二进制习题
    jQuery层次选择器
  • 原文地址:https://www.cnblogs.com/rsmx/p/13067505.html
Copyright © 2011-2022 走看看