| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
parent directory.. | ||||
希尔排序,也被称为递减增量排序,是简单插入排序的一种改进版本。
import java.util.Arrays;
public class ShellSort {
private static int[] shellSort(int[] arr) {
int n = arr.length;
for (int gap = n / 2; gap > 0; gap /= 2) {
for (int i = gap; i < n; i++) {
int key = arr[i];
int j = i;
while (j >= gap && arr[j - gap] > key) {
arr[j] = arr[j - gap];
j -= gap;
}
arr[j] = key;
}
}
return arr;
}
public static void main(String[] args) {
System.out.println(Arrays.toString(shellSort(new int[]{1, 2, 7, 9, 5, 8})));
}
}function shellSort(arr) {
var len = arr.length;
var gapSize = Math.floor(len / 2);
while (gapSize > 0) {
for (var i = gapSize; i < len; i++) {
var temp = arr[i];
var j = i;
while (j >= gapSize && arr[j - gapSize] > temp) {
arr[j] = arr[j - gapSize];
j -= gapSize;
}
arr[j] = temp;
}
gapSize = Math.floor(gapSize / 2);
}
return arr;
}
let arr = [6, 3, 2, 1, 5];
console.log(shellSort(arr));package main
import "fmt"
func shellSort(nums []int) {
n := len(nums)
for gap := n / 2; gap > 0; gap /= 2 {
for i := gap; i < n; i++ {
j, num := i-gap, nums[i]
for ; j >= 0 && nums[j] > num; j -= gap {
nums[j+gap] = nums[j]
}
nums[j+gap] = num
}
}
}
func main() {
nums := []int{1, 2, 7, 9, 5, 8}
shellSort(nums)
fmt.Println(nums)
}时间复杂度:
希尔排序的时间性能取决于所取“增量”序列的函数,这涉及到一些数学上尚未解决的难题。但是有人通过大量的实验,给出了较好的结果:当 n 较大时,比较和移动的次数约在 n^1.25 到 (1.6n)^1.25 之间。所以可以这样简单记忆:
空间复杂度:O(1)。
| Back | FazBrowse Home | New Git URL |