# å¸å°æåº å¸å°æåºï¼ä¹è¢«ç§°ä¸ºéåå¢éæåºï¼æ¯ç®åæå ¥æåºçä¸ç§æ¹è¿çæ¬ã - å¨æå ¥æåºä¸ï¼å¦æå¾ æåºåä¸çæä¸ªå ç´ ï¼è·ç¦»æåºæ°åä¸å¾ æå ¥ä½ç½®é常è¿ï¼å°±éè¦æ¯è¾å¾å¤æ¬¡æå¯ä»¥å°è¾¾æå ¥ä½ç½®ï¼è¿æ¯å ä¸ºå¾ æå ¥å ç´ å±é¨é常æ åºï¼æ¯å¦è¯´`[2, 3, 4, 5, 6, 7, 8, 1, ...]`ï¼æä»¬è¦æå ¥ 1ï¼å°±å¿ é¡»å° 1 ååé¢ç 2-8 æ¯ä¸ªå¼é½æ¯è¾ä¸ä¸ï¼å°±æ¯å 为 1 éè¿é常æ åºï¼æ³è±¡ä¸ä¸ï¼å¦æå¾ æå ¥å ç´ éè¿æ¯è¾æåºï¼é£ä¹å¨è¿è¡æå ¥æåºçæ¶åå°±åªéè¦æ¯è¾é常å°çå æ¬¡å°±å¯ä»¥æå ¥å°æ£ç¡®ä½ç½®ã - å¸å°æåºå°±æ¯å ææ´ä¸ªåºåæå¾ç¸å¯¹æ¯è¾æåºï¼åè¿è¡æå ¥æåºçæ¶åï¼éè¦æ¯è¾ç次æ°å°±ä¼åå¾å¾å°ã - æå ¥æåºçå¢é(é´é)为 1ï¼å¸å°æåºç¸å½äºå°è¿ä¸ªé´éä»æå¤§ä¸ºæ°ç»é¿åº¦çä¸åä¸ç´éå° 1ï¼è¿ä¸ç¹å¨ç¨åºä¸ä½ç°ç徿¸ æ¥ãå½é´éå¾å¤§æ¶ï¼æ¯è¾ç次æ°ä¹ä¼å¾å°ï¼å¨è¿è¡äºå 次大é´éçæå ¥æåºåï¼åºåå·²ç»é¨åæåºï¼è¿æ ·åè¿è¡å°é´éçæå ¥æåºä¹èªç¶ä¼æ¯è¾å¾å°ç次æ°ã - å¸å°æåºå°±æ¯å°å¤å¨ç¸åé´éçå ç´ æååºæ¥åç¬è¿è¡æå ¥æåºï¼ç¶å鿥å°é´éåå°å° 1 çè¿ç¨ã ## 代ç ç¤ºä¾ ### **Java** ```java 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}))); } } ``` ### **JavaScript** ```js 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)); ``` ### **Go** ```go 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` ä¹é´ãæä»¥å¯ä»¥è¿æ ·ç®åè®°å¿ï¼ - å½ n è¾å°æ¶ï¼å¸å°æåºåæå ¥æåºç¸å·®ä¸å¤§ï¼é½ä¸º n² å·¦å³ã - å½ n å¾å¤§æ¶ï¼æ¶é´å¢é¿å¹ åº¦éæ¸æ¾ç¼ï¼å¹³åå¤æåº¦æ¯ nlognã 空é´å¤æåº¦ï¼O(1)ã