//待排序數(shù)組
? ? ? ? ? var sortArray = [1,2,5,1000,500,200,49,100,50,40,30,20];
? ? ? ? ? //加“監(jiān)聽哨”
? ? ? ? ? sortArray.insert(0, 0);
? ? ? ? ? //打印待排序數(shù)組
? ? ? ? ? print(sortArray);
? ? ? ? ? //希爾排序
? ? ? ? ? int d = sortArray.length ~/ 2;//計(jì)算步長(zhǎng)
? ? ? ? ? int j = 0;
? ? ? ? ? while (d > 0) {
? ? ? ? ? ? //i = d+1,因?yàn)閺?開始才是要排序的數(shù)據(jù),0位是崗哨位,用來保存取出的待排序數(shù)據(jù)
? ? ? ? ? ? for (var i = d + 1; i < sortArray.length; i++) {
? ? ? ? ? ? ? j = i - d;
? ? ? ? ? ? ? while (j > 0) {
? ? ? ? ? ? ? ? if (sortArray[j] > sortArray[j + d]) {
? ? ? ? ? ? ? ? ? //比較根據(jù)步長(zhǎng)取出的數(shù)據(jù),j位的數(shù)據(jù)大于j+d位的數(shù)據(jù)忘伞,就交換他們的位置
? ? ? ? ? ? ? ? ? sortArray[0] = sortArray[j];
? ? ? ? ? ? ? ? ? sortArray[j] = sortArray[j + d];
? ? ? ? ? ? ? ? ? sortArray[j + d] = sortArray[0];
? ? ? ? ? ? ? ? ? j = j - d;
? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? j = -1;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? d = d ~/ 2;
? ? ? ? ? }
? ? ? ? ? //移除監(jiān)聽哨
? ? ? ? ? sortArray.removeAt(0);
? ? ? ? ? print("排完序的數(shù)組${sortArray}");