2016-01-28 47 views
1

我想在SCALA中編寫一個遞歸函數,將罪列出來並對其進行排序。Scala中的排序功能運行很長時間

但是,代碼似乎運行了很長時間。它甚至沒有給我一個錯誤信息。

def sort(list:List[Int]):List[Int] = list match{ 

    case Nil => Nil 
    case h::t => insert (h, sort(t)) 
def insert(num:Int, list:List[Int]): List[Int]=list match{ 
    case Nil => List() 
    case head::tail=> 
    if(head>=num) 
     num::list 
    else 
     head::insert(num,tail) 
    } 
sort(list) 
} 

回答

1

你有2個問題:

1)你是從sort函數遞歸調用sort直接 - 刪除sort(list)因爲insert已經調用它。這將使其終止。 2)你在其中一個案例中返回一個空列表,而不是用1個elem-base案例構造一個列表是錯誤的。

這個版本的作品:

def sort(list: List[Int]): List[Int] = { 
     def insert(num: Int, list: List[Int]): List[Int] = list match { 
      case Nil => num :: Nil 
      case head::tail => 
      if(head >= num) 
       num::list 
      else 
       head::insert(num, tail) 
     } 
     list match { 
      case Nil => Nil 
      case h::t => insert(h, sort(t)) 
     } 
    } 
相關問題