一、希尔排序是什么?
希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。
希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至 1 时,整个文件恰被分成一组,算法便终止。
二、用JavaScipt实现
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
</body>
<script type="text/javascript">
var arr = [9, 1, 2, 5, 7, 4, 8, 6, 3, 5]; //初始化数组
var half = parseInt(arr.length / 2); //设置增量为原数组长度的一半
//控制增量
for (var gap = half; gap >= 1; gap = parseInt(gap / 2)) {
console.log('--------gap' + gap); //检查增量gap的值
//循环整个数组
for (var i = gap; i < arr.length; i++) {
// console.log(arr[i]);//检验循环遍历的次数
//循环每个小组内的数字
for (var j = i - gap; j >= 0; j = j - gap) {
// console.log(j, j - gap);
console.log(j, arr[j], arr[j + gap]); //索引,用来比较的两个值
//比较大小,交换位置
if (arr[j] > arr[j + gap]) {
var temp = arr[j];
arr[j] = arr[j + gap];
arr[j + gap] = temp;
}
}
console.log('+++++++++++')
}
}
console.log(arr);
</script>
</html>