a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 34|回复: 0

[C语言] C基础:C语言实现以及冒泡排序

[复制链接]
发表于 2012-7-31 21:48:08 | 显示全部楼层 |阅读模式
  汉诺塔绝对是一个经典的算法题目,虽然当年也讲过,程序也不长,但是一直以来总觉得理解的不清楚,看程序也能明白什么意思,过一段时间程序忘了,想不起来的时候,就怎么都想不明白了,虽然说好像是那么回事,就是高不明白。借着前两天做八皇后的东风,顺便来理一下这个汉诺塔。园盘从上到下编号1, 2, ..., n,杆子从左至右A,B,C,A是from,C是to。我还是看了以前的java程序然后自己理解一下写的C程序,几乎没有差别,当然写的时候也忘了不少,第一遍出来错误的答案。程序如下:0 V: i" y7 |5 d) |' h% h
  #include 3 X( T9 |1 ^+ K7 ~3 I- C" ~2 \
  #define INIT_NUM 3
+ B, l2 B$ z: w2 i3 b  int count;
( u. d: S& q7 n5 F  ]' q  void hanoi(int n, char from, char to, char middle)
" c) e( r3 q, l5 |  {* l7 R3 P7 _$ ^0 D! D7 [# n
  if (n > 0)
2 }0 R7 S2 ~1 ^/ Z4 M  y9 O& z  {! \+ A/ ?3 L! P! y$ Q8 E+ m' x# K
  count++;
2 E0 E. t- B- u: j* r, J  hanoi(n-1, from, middle, to);# W3 p& f# N# U/ k& ^; U, i
  printf("Move No.%-2d from %c to %c\n", n, from, to);2 B3 z" E& V1 p8 H3 U; L
  hanoi(n-1, middle, to, from);- @  C2 P1 k3 }0 Z
  }8 ]& j7 }5 d2 R, W0 z. w9 T# u
  }
( p8 Q& h7 g4 p; V  int main(int argc, char *argv[])* Z( k, y# V5 s9 A3 \% @0 ?: `& y- T9 [
  {, t. H4 W2 y# [# J6 ~6 M
  int init = INIT_NUM;
0 e5 h2 W7 ?" M. Q( F' X4 Z1 m  if (argc==2)
7 f& y4 \# L' o7 |1 S  init = atoi(argv[1]);
! ^9 K9 Z: X$ }  printf("A 是起始杆,C 是辅助杆,B 是目的杆。\n\n");! @# }# ]" S! ?( D
  hanoi(init, 'A', 'C' , 'B');! i6 R7 w. r, [/ l' q7 F
  printf("\nCount = %d", count);
! [) S1 U; s0 A8 M2 [  return 0;. K) a) N* i' I' j
  }/ S, D- `3 z& V* l
  借着这股东风,我再顺便写一下排序的算法实现,我只记得冒泡跟快速排序了,现在先写一个冒泡排序吧:$ G' N  `6 \  M
  #include 5 N8 ^+ m# \, H
  void show (int *p)
6 L8 W2 Y, U( B  {# ?6 s5 S  W8 p6 c) y, S. _
  int i=0;
) W3 t4 v! o0 f. F4 R. ^* ^  for (i=0 ;i
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-6-18 03:58 , Processed in 0.677683 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表