//参考视频:正月点灯笼(汉诺塔)#includeintcount=0;//hanoi函数:hanoi(intn,charA,charB,charC)理解(将n个盘子从A经过B移动到C)voidhanoi(intn,charA,charB,charC){if(n==1){printf("%c-->%c\n",A,C);}else{hanoi(n-1,A,C,B);printf("%c-->%c\n",A,C);hanoi(n-1,B,A,C);}count++;}intmain(){hanoi(6,'A','B','C');printf("一共移动%d次\n",count);return0;}6.归并排序:
冒泡排序:
//参考视频:正月点灯笼#include//一次冒泡voidbubble(intarr[],intn){inti,temp;for(i=0;iarr[i+1]){temp=arr[i];arr[i]=arr[i+1];arr[i+1]=temp;}}}//冒泡排序voidbubblesort(intarr[],intn){for(inti=n;i>=1;i--){bubble(arr,i);}}//测试intmain(){intarr[]={2,1,5,4,3,6};bubblesort(arr,6);for(inti=0;i<6;i++){printf("%d",arr[i]);}return0;}选择排序:
//参考视频:正月点灯笼#include//找到最大值的下标intfindMaxPos(intarr[],intn){intmax=arr[0];//maxintpos=0;//max的下标inti;for(i=0;imax){max=arr[i];pos=i;}}returnpos;}//选择排序voidselectsort(intarr[],intn){while(n>1){intpos=findMaxPos(arr,n);inttemp=arr[pos];arr[pos]=arr[n-1];arr[n-1]=temp;n--;}}//测试intmain(){intarr[]={2,1,5,4,3,6};selectsort(arr,6);for(inti=0;i<6;i++){printf("%d",arr[i]);}return0;}8.KMP算法:
//参考视频:正月点灯笼#include//求next数组(s代表字符串,next代表next数组,n代表长度)voidnext_table(chars[],intnext[],intn){next[0]=0;intlen=0;inti=1;;while(i0){len=next[len-1];}else{next[i]=len;i++;}}}}intmain(){chars[]="ABABCABAA";intnext[9];intn=9;next_table(s,next,n);for(inti=0;i