我们先不分析排序算法的复杂度和稳定性,着重实现一遍所有的排序算法。
然后另起一篇简单的分析一下
/*Sort and search method*/
function ArrayList() {
var arr = [];
this.insert = function (value) {
arr.push(value);
}
this.toString = function () {
return arr.join(" ");
}
/*按照下标的交换辅助函数*/
function swap(index1, index2) {
var temp;
temp = arr[index1];
arr[index1] = arr[index2];
arr[index2] = temp;
}
/*冒泡排序*/
this.bubbleSort = function () {
var len = arr.length;
for(var i=0; i<len-1; ++i) {
for(var j=0; j<len-i-1; ++j) {
if(arr[j] > arr[j+1]) {
swap(j, j+1);
}
}
}
return this;
}
/*选择排序*/
this.selectionSort = function () {
var len = arr.length;
var min_index = 0;
for(var i=0; i<len-1; ++i) {
min_index = i;
for(var j=i+1; j<len; ++j) {
if(arr[j] < arr[min_index]) {
min_index = j;
}
}
if( i != min_index) {
swap(i, min_index);
}
}
return this;
}
/*插入排序*/
this.insertionSort = function () {
var len = arr.length;
var temp;
for(var i=0; i<len-1; ++i) {
for(var j=0; j<=i; ++j) {
if(arr[j] > arr[i+1]) {
temp = arr.splice(i+1, 1);
arr.splice(j, 0, temp);
}
}
}
return this;
}
}
function test() {
var arr = [8, 7, 10, 4, 3];
var arr_list = new ArrayList();
for(var i=0; i<arr.length; ++i) {
arr_list.insert(arr[i]);
}
console.log(arr_list.toString());
//console.log(arr_list.bubbleSort().toString())
//console.log(arr_list.selectionSort().toString());
console.log(arr_list.insertionSort().toString())
}
test();