明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1935|回复: 8

帮我看看

[复制链接]
发表于 2003-2-27 10:33:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2003-2-27 10:33:14 编辑

一个简单的冒泡法,可怎么就没动静
(defun c:sort()
  (setq lists '(1 2 5 3 6))
  (setq n 1)
  (setq i 0)
  (while (< i (length lists))
    (setq n 0)
    (while (< n (- (length lists) i))
      (setq d1 (nth n lists))
      (setq d_1 (nth (1- n) lists))
      (if (< d1 d_1)
        (progn
          (subst d1 (nth (1- n) lists) lists);跟踪发现这两句不动作,可单独使用它却可以
          (subst d_1 (nth n lists) lists)
        )
        )
      (setq n (1+ n))
    )
    (setq i (1+ i))
  )
  (princ lists)
  (princ)
)
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2003-2-27 12:50:00 | 显示全部楼层

先把函數再看一遍吧!

先把函數再看一遍吧!
(setq lists '(1 1 5 3 6))
(subst 2 (nth 0 lists) lists)


(1 1 5 3 6)
(2 2 5 3 6)
_$
 楼主| 发表于 2003-2-27 13:57:00 | 显示全部楼层

我知道你的意思,可我这个表是没有重复的,

希望能告诉我怎么个错法,我自己写了一个更换表中元素的函数,代进去后,就可以了
发表于 2003-2-27 17:07:00 | 显示全部楼层

替換時會有重覆出現!!!

本帖最后由 作者 于 2003-2-27 17:07:47 编辑

(setq LISTS '(1 2 5 3 6))
(setq D1 (nth 0 LISTS))
(setq D_1 (nth 1 LISTS))
(setq LISTS (subst D1 (nth 1 LISTS) LISTS))
(setq LISTS (subst D_1 (nth 0 LISTS) LISTS))



(1 2 5 3 6)
1
2
(1 1 5 3 6)
(2 2 5 3 6)
 楼主| 发表于 2003-2-27 17:09:00 | 显示全部楼层

那也是导致表出现混乱,而我出现的错误是表没有任何动静

发表于 2003-2-27 17:38:00 | 显示全部楼层

将你的(1- n)检查一下

;;此处你将n设为0了,此时若i=0
   (setq n 0)
    (while (< n (- (length lists) i)) ;;条件成立
      (setq d1 (nth n lists))   ;;d为1
      (setq d_1 (nth (1- n) lists)) ;;n=0,(1- n)=-1?,怎么执行?
      (if (< d1 d_1)
(progn
  (subst d1 (nth (1- n) lists) lists);;n=0,(1- n)=-1?,怎么执行?
 楼主| 发表于 2003-2-27 17:52:00 | 显示全部楼层

看出点问题了,多谢!

发表于 2003-2-28 15:21:00 | 显示全部楼层

注意:不能有重覆數

本帖最后由 作者 于 2003-2-28 15:21:01 编辑

;; <1>
;;Sorry這個不是冒泡法
;;注意:不能有重覆數
;;(SORT'(1 2 5 3 6))
(defun SORT (LISTS / A N I D1 D_1)
  (setq N 1)
  (setq I 0)
  (while (< I (length LISTS))
    (setq N 0)
    (while (< N (- (length LISTS) I))
      (setq D1 (nth N LISTS))
      (setq D_1 (nth (1+ N) LISTS))
      (if (< D1 D_1)
        (setq
          LISTS        (append        (list (car (setq A (member D_1 LISTS))))
                        (reverse (cdr (member D_1 (reverse LISTS))))
                        (cdr A)
                )
        )
      )
      (setq N (1+ N))
    )
    (setq I (1+ I))
  )
  (princ LISTS)
  (princ)
)

;;<2>
;;這個有點像,LISP冒泡法
;;(SORT '(1 2 5 3 6 4 7 9 2 5 9 12))
(defun SORT (LISTS / I LISTS_2 N D1 D_1 LISTS)
  (setq        I 0
        LISTS_2        NIL
  )
  (repeat (- (length LISTS) 1)
    (setq N 0)
    (repeat (- (length LISTS) 1)
      (setq D1 (nth 0 LISTS))
      (setq D_1 (nth (1+ N) LISTS))
      (if (< D1 D_1)
        (setq LISTS (TT LISTS D1 D_1 N))
      )
      (setq N (1+ N))
    )
    (setq LISTS_2 (append LISTS_2 (list (nth 0 LISTS))))
    (setq LISTS (cdr LISTS))
    (setq I (1+ I))
  )
  (setq LISTS_2 (append LISTS_2 (list (nth 0 LISTS))))
)

(defun TT (LISTS D1 D_1 NOS / N LISTS_1)
  (setq LISTS_1 (list D_1))
  (setq N 1)
  (repeat (- (length LISTS) 1)
    (if        (= (+ 1 NOS) N)
      (setq LISTS_1 (append LISTS_1 (list D1)))
      (setq LISTS_1 (append LISTS_1 (list (nth N LISTS))))
    )
    (setq N (1+ N))
  )
  LISTS_1
)
 楼主| 发表于 2003-2-28 15:35:00 | 显示全部楼层

多谢,你的后一个的跟我的一样,我自己写的交换位置的函数同你的思路一样

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 06:41 , Processed in 0.167052 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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