点击这里给我发消息 点击这里给我发消息

汉诺塔的C语言实现以及冒泡排序

添加时间:2013-12-7
    相关阅读: 程序 C语言
    汉诺塔绝对是一个经典的算法题目,虽然当年也讲过,程序也不长,但是一直以来总觉得理解的不清楚,看程序也能明白什么意思,过一段时间程序忘了,想不起来的时候,就怎么都想不明白了,虽然说好像是那么回事,就是高不明白。借着前两天做八皇后的东风,顺便来理一下这个汉诺塔。园盘从上到下编号1, 2, ……, n,杆子从左至右A,B,C,A是from,C是to.我还是看了以前的java程序然后自己理解一下写的C程序,几乎没有差别,当然写的时候也忘了不少,第一遍出来错误的答案。程序如下:

 #include <stdio.h>

#define INIT_NUM 3
int count;
void hanoi(int n, char from, char to, char middle)
{
if (n > 0)
{
count++;
hanoi(n-1, from, middle, to);
printf("Move No.%-2d from %c to %c\n", n, from, to);
hanoi(n-1, middle, to, from);
}
}
int main(int argc, char *argv[])
{
int init = INIT_NUM;
if (argc==2)
init = atoi(argv[1]);
printf("A 是起始杆,C 是辅助杆,B 是目的杆。\n\n");
hanoi(init, 'A', 'C' , 'B');
printf("\nCount = %d", count);
return 0;
}

    借着这股东风,我再顺便写一下排序的算法实现,我只记得冒泡跟快速排序了,现在先写一个冒泡排序吧:

 #include <stdio.h>

void show (int *p)
{
int i=0;
for (i=0 ;i<8 ;i++ )
{
printf("%3d ", p[i]);
}
printf("\n");
}
int main(int argc, char *argv[])
{
int p[] = {8, 9, 4, 5, 1, 7, 6, 0};
int i = 0;
int j = 0;
int tmp = 0;
for (i=0 ;i<8 ;i++ )
{
for (j=0 ;j<7-i ;j++ )
{
if (p[j] > p[j+1])
{
tmp = p[j];
p[j] = p[j+1];
p[j+1] = tmp;
}
}
printf("第%2d轮排序结束:", i+1);
show(p);
}

return 0;
}

相关汉诺塔的C语言实现以及冒泡排序

咨询热线:020-85648757 85648755 85648616 0755-27912581 客服:020-85648756 0755-27912581 业务传真:020-32579052
广州市网景网络科技有限公司 Copyright◎2003-2008 Veelink.com. All Rights Reserved.
广州商务地址:广东省广州市黄埔大道中203号(海景园区)海景花园C栋501室
= 深圳商务地址:深圳市宝源路华丰宝源大厦606
研发中心:广东广州市天河软件园海景园区 粤ICP备05103322号 工商注册