scala 排序算法 希尔排序

package com.xing.hai

/**
  * Created by xxxxx on 2/22/2017.
  * Scala 语言中提供的数组是用来存储固定大小的同类型元素
  * 数组的第一个元素索引为0,最后一个元素的索引为元素总数减1。
  * 希尔排序 也叫最小增量排序
  *
  * 算法先将要排序的一组数按某个增量 d(n/2,n为要排序数的个数)分成若
  * 干组,每组中记录的下标相差 d.对每组中全部元素进行直接插入排序,
  * 然后再用一个较小的增量(d/2)对它进行分组,在每组中再进行直接插入排序。
  * 当增量减到 1 时,进行直接插入排序后,排序完成。
  */
object OrderHashSort extends App{
  val sortArray = Array(49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51,43)
  var d1:Int = sortArray.length
  var booleanX = true
  sortArray.foreach( x => print(" "+ x))
  println()
  while(booleanX){
    d1 = Math.ceil(d1 / 2).toInt
    val d= d1
    if(d == 1){
      booleanX = false
    }
    var sortTemp  = 0
    for(x <- 0 until  d ){
      for( i <- Range((x + d) , sortArray.length ,d)){
        var j = i - d
        sortTemp = sortArray(i)
        while(j>=0 && sortArray(j) > sortTemp){   //这里因为没有java 的 for  强大功能
            sortArray(j+d) =sortArray(j)          //比较如果不大于的话 ,最后又把值付给自个
            j -=d
        }
        //println( "x = "+ x + " i= " + i + " d =  " + d + " j = " + j )
        sortArray(j+d) = sortTemp
        sortArray.foreach( x => print(" "+ x))
        println()
      }
    }
  }

}


原文地址:https://www.cnblogs.com/TendToBigData/p/10501279.html