scala 排序算法 希尔排序

本文介绍Scala语言中希尔排序算法的实现过程。希尔排序通过逐步缩小增量进行多轮直接插入排序来提升效率。文章展示了具体的Scala代码实现,并详细解释了排序过程中各变量的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值