插入排序
image.png
/**
* Created by 編程只服JAVA on 2017.07.13.
*/
var arr = [1,43,23,56,12];
function inSertSort(Array)
{
for(var i = 1; i < Array.length; ++i)
{
//插入的起手位置
var key = arr[i];
//已排好序的部分Array[0, j]
var j = i - 1;
//如果插入的起手位置 < 前面排好序的部分
while (j > -1 && Array[j] > key)
{
Array[j + 1] = Array[j];
--j;
}
//找到合適的插入位置,因為j已經(jīng)跑到了前一個位置,因此需要j + 1
Array[j + 1] = key;
}
}
inSertSort(arr);
console.info(arr);
冒泡排序
image.png
/**
* Created by 編程只服JAVA on 2017.07.13.
*/
var arr = [1,43,23,56,12,12];
function bubbleSort(Array)
{
//for Array[0, high - 1]
for(var i = 0; i < Array.length - 1; ++i)
{
//優(yōu)化
var flag = true;
//for Array[high, i + 1] down to, 因為下面Array[j] < Array[j - 1],所以j >= i + 1;
//將小的元素向前冒
for(var j = Array.length - 1; j >= i + 1; --j)
{
if (Array[j] < Array[j - 1])
{
var temp = Array[j];
Array[j] = Array[j - 1];
Array[j - 1] = temp;
flag = false;
}
}
if (flag) break;
}
}
bubbleSort(arr);
console.info(arr);
選擇排序
/**
* Created by 編程只服JAVA on 2017.07.13.
*/
var arr = [1,43,23,56,12,12];
function selectSort(Array)
{
// 臨時變量,用于交換
var temp = 0;
var minIndex = 0;
// 要注意一點,當(dāng)要排序 N 個數(shù),已經(jīng)經(jīng)過 N-1 次遍歷后,已經(jīng)是有序數(shù)列
for(var i = 0; i < Array.length - 1; ++i)
{
// 用來保存最小值得索引
minIndex = i;
// 尋找第i個小的數(shù)值
for(var j = i + 1; j < Array.length; ++j)
{
if (Array[j] < Array[minIndex])
{
minIndex = j;
}
}
//可以加一個判斷minIndex != i,或許可以提升一點效率,不加也可以
// 將找到的第i個小的數(shù)值放在第i個位置上
if (minIndex != i)
{
temp = Array[minIndex];
Array[minIndex] = Array[i];
Array[i] = temp;
}
}
}
selectSort(arr);
console.info(arr);