2016-02-14 • ☕️ 1 min read
上面我们介绍了在速度上比较慢的插入排序
,现在我们来介绍一种在速度上秒杀插入排序
的排序算法——希尔排序
。
希尔排序也成为增量排序。希尔排序使用一个序列,叫增量序列。只要,任何增量序列都是可以的。在使用增量的一趟排序后,对于每一个我们有(A 为待排序的数组),所有相隔的元素都将被排序,此时称其为hk-排序
的。希尔排序的一个重要性质是:一个排序的文件将保持它的h_k 排序性
,也就是说经排序后,任然满足。
依据所选择的增量序列的不同,算法的时间复杂度也有所不同。对于 shell 本人推荐的增量序列来说,时间复杂度为:。
int * shell_sort(int * data, int num){
int i, j, increment, temp;
for(increment = num / 2; increment > 0 ; increment = increment / 2){
for(i = increment; i < num; i ++){
temp = data[i];
for(j = i; j >= increment; j -= increment){
if(temp < data[j - increment])
data[j] = data[j - increment];
else
break;
}
data[j] = temp;
}
}
return data;
}
function shell_sort(data) {
var increment = Math.floor((data.length / 2));
var temp;
for (; increment > 0; increment = Math.floor((increment / 2))) {
for (var i = increment; i < data.length; i ++) {
temp = data[i];
for(var j = i; j >= increment; j -= increment) {
if(temp < data[j - increment]) {
data[j] = data[j - increment];
} else {
break;
}
}
data[j] = temp;
}
}
}
测试平台和代码上篇已经介绍过了,这里就不赘述了,直接给出测试结果。
Personal blog by Natumsol.
Note thoughts and experience.