归并排序

来源:互联网 发布:算法平台 编辑:程序博客网 时间:2024/05/22 12:47


#lang scheme

( define ( list-len lst )
   ( cond 
      [ ( null? lst ) 0 ]
      [ else ( + 1 ( list-len ( cdr lst ) ) ) ] ) )

( define ( left-branch lst len )
   ( cond
      [ ( = len 0 ) '() ]
      [ else 
        ( cons ( car lst )
               ( left-branch ( cdr lst )
                             ( - len 1 ) ) ) ] ) )

( define ( right-branch lst len )
   ( cond 
      [ ( = ( list-len lst ) len ) lst ]
      [ else 
        ( right-branch ( cdr lst ) len ) ] ) )

( define ( merge lst1 lst2 )
   ( cond 
      [ ( null? lst1 ) lst2 ]
      [ ( null? lst2 ) lst1 ]
      [ ( < ( car lst1 )( car lst2 ) )
        ( cons ( car lst1 )
               ( merge ( cdr lst1 ) lst2 ) ) ]
      [ else
        ( cons ( car lst2 )
               ( merge lst1 ( cdr lst2 ) ) ) ] ) )

( define ( merge-sort lst )
   ( cond 
      [ ( null? ( cdr lst ) ) lst ]
      [ else 
        ( let* ( [ len ( list-len lst ) ]
                 [ pivot ( floor ( / len 2 ) ) ] )
           ( merge ( merge-sort ( left-branch lst pivot ) )
                   ( merge-sort ( right-branch lst ( - len pivot ) ) ) ) ) ] ) )

( define lst '( 11 21 3 4 8 33 5 1 12 111 12 0 99 19 ) )
( merge-sort lst )


0 0
原创粉丝点击