JavaScript排序算法之插入排序
2011-10-30 00:00
991 查看
插入排序(straight insertion sort)的做法是:每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。
第一趟比较前两个数,然后把第二个数按大小插入到有序表中; 第二趟把第三个数据与前两个数从前向后扫描,把第三个数按大小插入到有序表中;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程。
直接插入排序属于稳定的排序,时间复杂性为o(n^2),空间复杂度为O(1)。
直接插入排序是由两层嵌套循环组成的。外层循环标识并决定待比较的数值。内层循环为待比较数值确定其最终位置。直接插入排序是将待比较的数值与它的前一个数值进行比较,所以外层循环是从第二个数值开始的。当前一数值比待比较数值大的情况下继续循环比较,直到找到比待比较数值小的并将待比较数值置入其后一位置,结束该次循环。
值得注意的是,我们必需用一个存储空间来保存当前待比较的数值,因为当一趟比较完成时,我们要将待比较数值置入比它小的数值的后一位 插入排序类似玩牌时整理手中纸牌的过程。插入排序的基本方法是:每步将一个待排序的记录按其关键字的大小插到前面已经排序的序列中的适当位置,直到全部记录插入完毕为止。
//document.write("----------直接插入排序-------时间复杂度为n的平方,略好于冒泡------");
//document.write("
")
//var array = new Array(12, 25, 32, 16, 18, 27, 59, 69, 36);
function insertSort(array) {
var temp;
var result = "";
for (var i = 1; i < array.length; i++) {
var temp = array[i];
for (var j = i; j > 0 && temp < array[j - 1]; j--) {
array[j] = array[j - 1];
}
array[j] = temp
/* 输出结果 */
result += "第" + i + "次循环,结果为:";
for (var k = 0; k < array.length; k++) {
result += array[k] + ",";
}
result += "
";
/* 输出结果结束 */
}
return result;
}
//insertSort(array);
//document.write("
")
var gras = document.getElementById("gen_rand_arr_show");
var array = new Array();
gra.onclick = function(){
for(i = 0; i < 8; i++)
{
array[i] = Math.ceil(Math.random()*(100 - 0)+0)
}
//alert(Math.ceil(Math.random()*(100 - 0)+0));
//alert(array);
gras.innerHTML = array;
}
var btn = document.getElementById("btn");
//alert(btn);
btn.onclick = function(){
var result = document.getElementById("result");
result.innerHTML = insertSort(array);
}
第一趟比较前两个数,然后把第二个数按大小插入到有序表中; 第二趟把第三个数据与前两个数从前向后扫描,把第三个数按大小插入到有序表中;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程。
直接插入排序属于稳定的排序,时间复杂性为o(n^2),空间复杂度为O(1)。
直接插入排序是由两层嵌套循环组成的。外层循环标识并决定待比较的数值。内层循环为待比较数值确定其最终位置。直接插入排序是将待比较的数值与它的前一个数值进行比较,所以外层循环是从第二个数值开始的。当前一数值比待比较数值大的情况下继续循环比较,直到找到比待比较数值小的并将待比较数值置入其后一位置,结束该次循环。
值得注意的是,我们必需用一个存储空间来保存当前待比较的数值,因为当一趟比较完成时,我们要将待比较数值置入比它小的数值的后一位 插入排序类似玩牌时整理手中纸牌的过程。插入排序的基本方法是:每步将一个待排序的记录按其关键字的大小插到前面已经排序的序列中的适当位置,直到全部记录插入完毕为止。
<script type="text/javascript"> //document.write("----------直接插入排序-------时间复杂度为n的平方,略好于冒泡------"); //document.write("<br /><br />") //var array = new Array(12, 25, 32, 16, 18, 27, 59, 69, 36); function insertSort(array) { var temp; var result = ""; for (var i = 1; i < array.length; i++) { var temp = array[i]; for (var j = i; j > 0 && temp < array[j - 1]; j--) { array[j] = array[j - 1]; } array[j] = temp /* 输出结果 */ result += "这是第" + i + "次循环,结果为:"; for (var k = 0; k < array.length; k++) { result += array[k] + ","; } result += "<br />"; /* 输出结果结束 */ } return result; } //insertSort(array); //document.write("<br />") </script>
//document.write("----------直接插入排序-------时间复杂度为n的平方,略好于冒泡------");
//document.write("
")
//var array = new Array(12, 25, 32, 16, 18, 27, 59, 69, 36);
function insertSort(array) {
var temp;
var result = "";
for (var i = 1; i < array.length; i++) {
var temp = array[i];
for (var j = i; j > 0 && temp < array[j - 1]; j--) {
array[j] = array[j - 1];
}
array[j] = temp
/* 输出结果 */
result += "第" + i + "次循环,结果为:";
for (var k = 0; k < array.length; k++) {
result += array[k] + ",";
}
result += "
";
/* 输出结果结束 */
}
return result;
}
//insertSort(array);
//document.write("
")
效果演示
var gra = document.getElementById("gen_rand_arr");var gras = document.getElementById("gen_rand_arr_show");
var array = new Array();
gra.onclick = function(){
for(i = 0; i < 8; i++)
{
array[i] = Math.ceil(Math.random()*(100 - 0)+0)
}
//alert(Math.ceil(Math.random()*(100 - 0)+0));
//alert(array);
gras.innerHTML = array;
}
var btn = document.getElementById("btn");
//alert(btn);
btn.onclick = function(){
var result = document.getElementById("result");
result.innerHTML = insertSort(array);
}
相关文章推荐
- JavaScript排序算法之插入排序
- JavaScript排序算法——插入排序
- Javascript排序算法(冒泡排序,选择排序,插入排序,归并排序,快速排序)
- 插入排序
- 算法导论之插入排序和归并排序
- 插入排序
- linux c插入排序
- 插入排序
- 算法-插入排序
- Java -- 算法小结之插入排序
- 链表实现插入排序
- 算法(第四版)学习笔记之java实现插入排序
- 随手小代码——在归并排序中对小数组采用插入排序
- c语言排序之冒泡排序,选择排序,插入排序,快速排序总结
- 两种插入排序的方法
- C语言插入排序
- 排序算法之插入排序
- C++_插入排序
- SDUT 顺序表应用5:有序顺序表归并(插入排序)
- 插入排序-java