人人范文网 范文大全

常考算法总结

发布时间:2020-03-02 02:59:06 来源:范文大全 收藏本文 下载本文 手机版

------------------------- void insertsort(int list[],int n) //直接插入排序 { int i,j,temp; for(i=1;i

for(j=i-1;j>=0;j--)

if(temp

list[j+1]=list[j];

else

break;

list[j+1]=temp; } } ------------------------- void incrsort(int list[],int n,int h) //shell排序 { int i,j,temp; for(i=h;i

for(j=i-h;j>=0;j-=h)

if(temp

list[j+h]=list[j];

else

break;

list[j+h]=temp; } }

void shellsort(int list[],int n) //shell排序 { int i,incr=n; do{ incr=incr/3+1; for(i=0;i

incrsort(list,n,incr); }while(incr>1); } ------------------------- void bubblesort(int list[],int n) //冒泡排序 { int i,j,temp; for(i=0;i

for(j=i+1;j

{

if(list[i]>list[j])

{

temp=list[i];

list[i]=list[j];

list[j]=temp;

}

} } ------------------------- void swap2(int &a,int &b) //引用传值 { int temp; temp=a; a=b; b=temp; } void swap1(int a,int b) //值传值 { int temp; temp=a; a=b; b=temp; } void swap(int *a,int *b) //指针传值 { int temp; temp=*a; *a=*b; *b=temp; } int partition(int list[],int low,int high) //快速排序 { int i=low+1,j=high,temp1; temp1=list[low]; do {

while(temp1>list[i]) i++;

while(temp1

if(i

{

swap(&list[i],&list[j]);

}

}while(i

swap(&list[low],&list[j]);

return j; }

void quicksort(int list[],int low,int high) //快速排序 { int k; if(low

k=partition(list,low,high);

quicksort(list,low,k-1);

quicksort(list,k+1,high); } } ------------------------- void merge(int list[],int *temp,int a,int b,int c,int d,int *k) //两路归并过程 { int i=a,j=b; while((i

{temp[(*k)++]=list[j++];} } while(i

void mergesort(int list[],int n) //归并排序 { int *temp=(int*)malloc(sizeof(int)*100); int a,b,c,d,i,k,h=1; while(h

a=0;k=0;

while(a+h

{

c=a+h;

b=c-1;

if(c+h-1>n-1) d=n-1;

else d=c+h-1;

merge(list,temp,a,b,c,d,&k);

a=d+1;

}

for(i=0;i

{list[i]=temp[i];}

h*=2; } } ------------------------- void selectsort(int list[],int n)//简单选择排序 { int i,j,small; for(i=0;i

small=i;

for(j=i+1;j

if(list[j]

small=j;

swap(&list[i],&list[small]); } } ------------------------- char * nizhi(char *str) //字符串逆置 { char *p=str; int len=strlen(str); int i,j; char temp;

for(i=0,j=len-1;i

*(p+len)=\'\\0\';

return p; } ------------------------- int x,y; //判断回文数

void judge(int * data,int len) //判断是否回文 { int i,j,f=0; for(i=0,j=len-1; i

void separate(int *data,int n) //将数字个十位分开 存入data { int j,k,t; y=0; while(n!=0) { *(data+y)=n%10; n=n/10; y++; } *(data+y)=\'\\0\';

for(j=0,k=y-1; j

node* nizhi(node* head) { node *p1,*p2,*p3; p1=head;p2=p1->next; while(p2) { p3=p2->next; p2->next=p1; p1=p2; p2=p3; } } ------------------------- //统计字符串中不含有重复字符的最大子串长度 int search(char *text){

int lastpos[256], lmax=0, curmax=0;

int i;

for(i=0;i

lastpos[i]=-1;

for(i=0; text[i]; i++)

{

if(i-lastpos[ text[i] ] > curmax)

{

curmax++;

lmax = (lmax>=curmax)?lmax:curmax;

}

else

curmax = i-lastpos[ text[i] ];

lastpos[ text[i] ] = i;

}

return lmax; } ------------------------- //整数转换成字符串 法一:

while(num) { temp[i]=num%10+’0’; i++; num=num/10; } 再将temp逆序 法二:

itoa(number,string,10);

//字符串转换成整数 法一:

while(temp[i]) { sum=sum*10+(temp[i]-‘0’); i++; } 法二:

int atoi(const char *nptr); ------------------------- //字符串循环右移n个

例如

abcdefghijkl n=2 结果为

klabcdefghij 实现:

Void loopmove(char *str,int n) { Char temp[maxsize]; Int step=strlen(str)-n; Strcpy(temp,str+step); Strcpy(temp+n,str); *(temp+strlen(str))=’\\0’; Strcpy(str,temp); } ------------------------- //单链表排序(简单选择排序) void selectSort(Node *node) {

Node *p; /*当前节点*/

Node *q; /*遍历未排序节点*/

Node *small; /*指向未排序节点中最小节点*/

int temp;

for(p = node->next; p->next->next != 0; p = p->next)

{

small = p;

for(q = p->next; q->next != 0; q = q->next)

if(small->value > q->value)

small = q;

temp = p->value;

p->value = small->value;

small->value = temp;

} }

-------------------------

//打印一字符串,数字正常打印,小写正常打印,大写转换成小写打印,其他字符不打印 for(i=0;i=48&&(int)str[i]

if((int)str[i]>=65&&(int)str[i]

if((int)str[i]>=97&&(int)str[i]

} ------------------------- //二分法查找

int halfsearch(int list[],int low,int high,int k) { int i,j,mid; i=low;j=high; if(i

else return halfsearch(list,low,mid-1,k); } } else return 0; } ------------------------- //单链表中已知一个指针p指向一个结点,p非头结点也非尾结点,如何删除p指向的结点

p->data=p->next->data; p->next=p->next->next; ------------------------- //计算str中子串sub出现的次数,str为原字符串,sub为子串 //判断两字符串是否相等,相等返回1,不等返回0 int Judge(char *movePt,char *tempPt) {

int i;

for(i = 0; i

{

if(*movePt != tempPt[i])

return 0;

}

return 1; } //计算子串出现的次数,str为原字符串,sub为子串 int StrCount(char *str,char *sub) {

int count = 0;

char *move = str;

if( strlen(str)

{

return 0;

}

else

{

while( strlen(move) >= strlen(sub) )

{

if( Judge(move, sub) )

{

count++;

}

move++;

}

}

return count; }

------------------------- 补充:

12.单例模式

public cla MyBean {

private static MyBean instance = null;

private MyBean(){}

public static synchronized MyBean getInstance(){

if(instance == null){instance = new MyBean();}

return instance;

}

} 13.回调函数

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。 14.句柄

句柄,是整个windows编程的基础,一个句柄是指使用的一个唯一的整数值,是指一个四字节长的数值,用于标志应用程序中的不同对象和同类对象中的不同的实例,诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等,应用程序能够通过句柄访问相应的对象的信息。但是,句柄不是一个指针,程序不能利用它句柄来直接阅读文件中的信息。如果句柄不用在I/O文件中,它是毫无用处的。 句柄是windows用来标志应用程序中建立的或是使用的唯一整数,windows使用了大量的句柄来标志很多对象。

// 八皇后问题(采用回溯法求解) #include #include using namespace std;

bool place(int,int,int *); void NQueens(int,int, int*); void NQueens(int,int *); static int sum=0;

int main(int argc, char* argv[]) { int x[8]; NQueens(8,x); cout

}

bool place(int k,int i,int* x) {

//判定两皇后是不是交叉

for (int j=0;j

if ((x[j]==i)||(abs(x[j]-i)==abs(j-k)))

return false;

return true; }

void NQueens(int k,int n,int* x){ for (int i=0;i

if (place(k,i,x)){

x[k]=i;

if (k==n-1){

for (i=0;i

cout

cout

++sum;

}

else NQueens(k+1,n,x);

} } }

void NQueens(int n,int* x){ NQueens(0,n,x); }

常考化学方程式总结

常考词频总结

常考词频总结

儿科学常考内容总结

金融常考知识点总结

初三常考化学方程式总结

政治生活常考知识点总结

教育学常考知识点总结

《三国演义》常考知识点总结

词汇总结(历年常考)

常考算法总结
《常考算法总结.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
相关专题 算法复习总结 算法
点击下载本文文档