[b]insertion sort[/b]
------
[b]insertion sort 原理[/b]
不断将数据插入已排序的序列,每次插入时,逐个比较,直到找到比自己大的则插入,
时间:o(n^2)
内存:o(1)
------
[b]例子[/b]:
* [b]javascript 代码[/b]
* [b]html 代码[/b]
------
------
------
[b]insertion sort 原理[/b]
不断将数据插入已排序的序列,每次插入时,逐个比较,直到找到比自己大的则插入,
时间:o(n^2)
内存:o(1)
------
[b]例子[/b]:
* [b]javascript 代码[/b]
var arr_one = [ 78, 13, 6, 177, 26, 90, 288, 45, 62 ];
/**
* insertion sort (插值排序),时间: o(n^2),内存: 1,
*
* @param inputArr
* @return
*/
function insertionSort(inputArr) {
// 1个临时变量
var tmp;
// 比较次数
var compareCount = 0;
// 移动次数
var moveCount = 0;
// 循环次数
var cycleCount = 0;
forOne: for ( var i = 0; i < inputArr.length; i++) {
cycleCount++;
forTwo: for ( var j = 0; j < inputArr.length; j++) {
cycleCount++;
compareCount++;
if (inputArr[i] <= inputArr[j]) { // 替换值,将 j~i 之间的值后羿一位,
tmp = inputArr[i];
for ( var k = i; k >= j + 1; k--) {
cycleCount++;
inputArr[k] = inputArr[k - 1];
moveCount++;
}
inputArr[j] = tmp;
continue forOne;
}
}
}
alert("输入长度:"+inputArr.length+",\n比较次数:" + compareCount + ",\n移动次数:" + moveCount + ",\n循环次数:" + cycleCount);
return inputArr;
};
* [b]html 代码[/b]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript" src="js/sort_test.js"></script>
</head>
<body>
<input type="button" value="insertion sort" onclick="alert(insertionSort(arr_one));" />
</body>
</html>
------
------