直接插入排序 JavaScript 实现代码:
123456789101112131415161718192021222324 | function insertionSort(array) {
//自定义函数,交换i和j的位置
function swap(array, i, j) {
var temp = array[i];
array[i] = array[j];
array[j] = temp;
}
var length = array.length,
i,//从第二项开始,与前一项作比较
j;//为了往前进行比较
for (i = 1; i < length; i++) {
for (j = i; j > 0; j--) {
//从第j项开始,与前一项比较大小,如果前项大于后项,则交换位置;如果前项小于等于后项,说明当前排序完成,跳出当前循环,i++进行下一项比较,直到最后一项。
if (array[j - 1] > array[j]) {
swap(array, j - 1, j);
} else {
break;
}
}
}
return array;
}
|
直接插入排序 JavaScript 实现代码,减少交换次数:
123456789101112131415161718 | function insertionSort(array) {
var length = array.length,
i,
j,
temp;//为了临时保存arr[i]
for (i = 1; i < length; i++) {
temp = array[i];//因为如果前一项比后一项大,则前一项要移到后一项,会覆盖第项的值,直到第j项时,j-1小于等于第j项,说明之前第i项的顺序在第j项
for (j = i; j >= 0; j--) {
if (array[j - 1] > temp) {
array[j] = array[j - 1];
} else {
array[j] = temp;
break;
}
}
}
return array;
}
|
直接插入排序 JavaScript 实现代码,二分查找排序
大专栏 插入排序代码分析class="gutter">12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 | function insertionSort2(array) {
function binarySearch(array, start, end, temp) {
var middle;
while (start <= end) {
//向下取整,获得中间的坐标
middle = Math.floor((start + end) / 2);
if (array[middle] < temp) {//说明temp在middle坐标后
if (temp <= array[middle + 1]) {//说明第middle+1项刚大于middle项,返回middle+1
return middle + 1;
} else {
//范围减1,再次进行while循环,直到找到temp顺序位置
start = middle + 1;
}
} else {//说明temp的顺序位置在middle之前
if (end === 0) {//使用==的都使用===
//说明temp最小
return 0;
} else {
//从0-middle开始找
end = middle;
}
}
}
}
function binarySort(array) {
var length = array.length,
i,
j,
k,
temp;
for (i = 1; i < length; i++) {
temp = array[i];
if (array[i - 1] <= temp) {
//前一项刚好小于等于第i项,不用再进行排序
k = i;
} else {
//进行二分查找
k = binarySearch(array, 0, i - 1, temp);
//找到temp的坐标k,将坐标后的都往后移一位
for (j = i; j > k; j--) {
array[j] = array[j - 1];
}
}
array[k] = temp;
}
return array;
}
return binarySort(array);
}
|
引用
来源:https://www.cnblogs.com/lijianming180/p/12026670.html