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()
}
}
}
}