/**
*@ author StormMaybin
*@ date 2016-10-02
*/
生命不息,奋斗不止
Js 冒泡排序实现
var arr = [19,23,15,14,3,58];
document.write("冒泡排序之前: ");
for (var i = 0; i < arr.length; i++)
{
document.write(arr[i]+" ");
}
var len = arr.length;
for (var i = 0; i < len; i++)
{
for (var j = i+1; j < len; j++)
{
if (arr[i] > arr[j])
{
var temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
document.write("<br />");
document.write ("冒泡排序之后");
for (var i = 0; i < len; i++)
{
document.write(arr[i]+" ");
}
JS插值排序
var arr = [19,23,15,14,3,58];
document.write("插值排序之前: ");
for (var i = 0; i < arr.length; i++)
{
document.write(arr[i]+" ");
}
document.write ("<br />");
var len = arr.length;
var arr2 = new Array();
arr2[0] = arr[0];
var flag = 0;
for (var i = 1; i < len; i++)
{
flag = 0;
for (var j = 0; j < arr2.length; j++)
{
if (arr[i] < arr2[j])
{
arr2.splice(j, 0, arr[i]);
flag = 1;
break;
}
}
if (flag == 0)
{
arr2.push (arr[i]);
}
}
document.write("插值排序之后: ");
for (var i = 0; i < arr2.length; i++)
{
document.write(arr2[i]+" ");
}
插值原理是另外用个数组,然后从原数组拿值插到第二个数组中去。但是这个算法得复杂度是O(n^2)的,可以用二分查找去优化一下。。。nlogn得复杂度。。
插值排序+二分
//插值+二分
document.write("插值排序之前: ");
for (var i = 0; i < arr.length; i++)
{
document.write(arr[i]+" ");
}
document.write ("<br />");
var arr2 = new Array();
arr2[0] = arr[0];
var left = 0;
var right = 0;
var mid = 0;
for (var i = 1; i < arr.length; i++)
{
//初始化操作
left = 0;
right = arr2.length;
while (left <= right)
{
//拿到中间值
mid = Math.floor ((left + right) / 2);
if (arr2[mid] < arr[i])
{
left = mid + 1;
}
else
{
right = mid;
}
if (left == right)
{
arr2.splice (left, 0, arr[i]);
break;
}
}
}
document.write("插值排序之后: ");
for (var i = 0; i < arr2.length; i++)
{
document.write(arr2[i]+" ");
}