代码拉取完成,页面将自动刷新
希尔排序,也被称为递减增量排序,是简单插入排序的一种改进版本。
[2, 3, 4, 5, 6, 7, 8, 1, ...]
,我们要插入 1,就必须将 1 和前面的 2-8 每个值都比较一下,就是因为 1 附近非常无序,想象一下,如果待插入元素附近比较有序,那么在进行插入排序的时候就只需要比较非常少的几次就可以插入到正确位置。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})));
}
}
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)
}
fn shell_sort(nums: &mut Vec<i32>) {
let n = nums.len();
let mut gap = n / 2;
while gap > 0 {
for i in gap..n {
let mut j = i - gap;
let temp = nums[i];
while j >= (0 as usize) && nums[j] > temp {
nums[j + gap] = nums[j];
j -= gap;
}
nums[j + gap] = temp;
}
gap /= 2;
}
}
fn main() {
let mut nums = vec![1, 2, 7, 9, 5, 8];
shell_sort(&mut nums);
println!("{:?}", nums);
}
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));
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。