Scala練習-希爾排序

參考文章:
白話經典算法系列之三 希爾排序的實現
ShellSort


package day14

/**
  * Created by doctorq on 2017/6/28.
  * 希爾排序:縮小增量排序
  * 時間複雜度nlog2n~n2之間
  */
object ShellSort extends App with Utils {


  def sort(unSort: Array[Int]): Array[Int] = {
    var step = unSort.size / 2

    while (step > 0) {
      //分成的子數組個數爲step
      for (i <- 0 until step) {
        //某個子數組採用插入排序算法進行排序
        for (j <- i + step to(unSort.size - 1, step)) {
          //直接插入排序
          if (unSort(j) < unSort(j - step)) {
            var k = j - step
            while (k > 0 && unSort(k + step) < unSort(k)) {
              swap(unSort, k, k + step)
              k -= step
            }
          }
        }
      }
      step /= 2
    }

    unSort
  }

  val list = Array(1, 4, 3, 5, 7, 3, 6, 8, 9, 23, 4, 5, 7, 2, 4, 5, 6, 7, 78, 3, 4)
  printlnArray(sort(list))

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章