//待排序数组
var sortArray = [1,2,5,1000,500,200,49,100,50,40,30,20];
//加“监听哨”
sortArray.insert(0, 0);
//打印待排序数组
print(sortArray);
//希尔排序
int d = sortArray.length ~/ 2;//计算步长
int j = 0;
while (d > 0) {
//i = d+1,因为从1开始才是要排序的数据,0位是岗哨位,用来保存取出的待排序数据
for (var i = d + 1; i < sortArray.length; i++) {
j = i - d;
while (j > 0) {
if (sortArray[j] > sortArray[j + d]) {
//比较根据步长取出的数据,j位的数据大于j+d位的数据,就交换他们的位置
sortArray[0] = sortArray[j];
sortArray[j] = sortArray[j + d];
sortArray[j + d] = sortArray[0];
j = j - d;
} else {
j = -1;
}
}
}
d = d ~/ 2;
}
//移除监听哨
sortArray.removeAt(0);
print("排完序的数组${sortArray}");
网友评论