如何在列表球拍的正确位置插入数字?
How to insert a number in correct position of a list racket?
假设你插入 (15) 如果我 运行 这个程序,输出将是 (14 16 17 18 19)
如何让程序将数字 15 插入正确的位置 (pos = 1) 或将任何数字 (n) 插入正确的位置 (pos)。
(define list1 '(14 16 17 18 19))
(define lst (list))
(define (insert lst n)
(if (empty? lst)
'()
(foldr cons (list n) lst))) ;The value gets inserted at the end of the list
我们有很多排序算法,如快速排序、直方图排序、冒泡排序。
你可以看这个Sorting Algorithms或者维基百科。
如果 n
大于列表中的每个数据,即 lst
变成 '()
我们只是 return (list n)
例如(f '() 1) -> '(1)
当 n
小于或等于我们在第一个位置插入的第一个元素时。
例如(f '(2) 1) -> (cons 1 '(2))
如果不是,我们需要这样的数据:
(f '(1 2 4) 3) -> (cons 1 (f '(2 4) 3)) -> (cons 1 (cons 2 (f '(4) 3))) -> (cons 1 (cons 2 (cons 3 '(4)))) -> (list 1 2 3 4)
(define (insert-with-<-order lst n)
(cond
[(empty? lst)
(list n)]
[(<= n (first lst))
(cons n lst)]
[else
(cons (first lst)
(insert-with-<-order (rest lst) n))]))
(insert-with-<-order '(1 1 2 3) 1.5)
(insert-with-<-order '(-2 0.5 1 2 5) 0.1)
(insert-with-<-order '(1 2 3) 4)
使用sort
(define (insert-with-order lst n)
(sort (cons n lst) <))
(insert-with-order '(14 16 17 18 19) 15)
假设你插入 (15) 如果我 运行 这个程序,输出将是 (14 16 17 18 19) 如何让程序将数字 15 插入正确的位置 (pos = 1) 或将任何数字 (n) 插入正确的位置 (pos)。
(define list1 '(14 16 17 18 19))
(define lst (list))
(define (insert lst n)
(if (empty? lst)
'()
(foldr cons (list n) lst))) ;The value gets inserted at the end of the list
我们有很多排序算法,如快速排序、直方图排序、冒泡排序。
你可以看这个Sorting Algorithms或者维基百科。
如果 n
大于列表中的每个数据,即 lst
变成 '()
我们只是 return (list n)
例如(f '() 1) -> '(1)
当 n
小于或等于我们在第一个位置插入的第一个元素时。
例如(f '(2) 1) -> (cons 1 '(2))
如果不是,我们需要这样的数据:
(f '(1 2 4) 3) -> (cons 1 (f '(2 4) 3)) -> (cons 1 (cons 2 (f '(4) 3))) -> (cons 1 (cons 2 (cons 3 '(4)))) -> (list 1 2 3 4)
(define (insert-with-<-order lst n)
(cond
[(empty? lst)
(list n)]
[(<= n (first lst))
(cons n lst)]
[else
(cons (first lst)
(insert-with-<-order (rest lst) n))]))
(insert-with-<-order '(1 1 2 3) 1.5)
(insert-with-<-order '(-2 0.5 1 2 5) 0.1)
(insert-with-<-order '(1 2 3) 4)
使用sort
(define (insert-with-order lst n)
(sort (cons n lst) <))
(insert-with-order '(14 16 17 18 19) 15)