上个月回头看《大话数据结构》的时候用JavaScript写了一下几个简单的排序算法,今天翻出来才发现堆排序、归并排序和快速排序忘了写,汗颜。先拖延着吧,这病是治不好了……
/* 冒泡排序 */
function bubbleSort (arr) {
var i, j, tmp;
for ( i = 0; i < arr.length; i++ ) {
for ( j = arr.length-2; j >= i; j-- ) {
if ( arr[j] > arr[j+1] ) {
tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
}
/* 选择排序 */
function selectSort (arr) {
var i, j, min, tmp;
for ( i = 0; i < arr.length; i++ ) {
min = i;
for ( j = i+1; j < arr.length; j++) {
if ( arr[j] < arr[min] ) {
min = j;
}
}
if ( i != min ) {
tmp = arr[i];
arr[i] = arr[min];
arr[min] = tmp;
}
}
}
/* 插入排序 */
function insertSort (arr) {
var i, j, mark;
for ( i = 1; i < arr.length; i++ ) {
mark = arr[i];
for ( j = i-1; j>=0 && arr[j]>mark; j-- ) {
arr[j+1] = arr[j];
}
arr[j+1] = mark;
}
}
/* 希尔排序 */
function shellSort (arr) {
var i, j, mark;
var increment = arr.length;
do {
increment = parseInt(increment/3)+1;
for ( i = increment; i < arr.length; i++ ) {
if ( arr[i] < arr[i-increment] ) {
mark = arr[i];
for ( j=i-increment; j>=0 && mark<arr[j]; j-=increment ) {
arr[j+increment] = arr[j];
}
arr[j+increment] = mark;
}
}
}
while ( increment > 1 );
}