function ArrayList() {
var arr = [];
this.insert = function (value) {
arr.push(value);
}
this.toString = function () {
return arr.join(" ");
}
/*归并排序*/
this.mergeSort = function () {
arr = mergeSortRec(arr);
return this;
}
function mergeSortRec(arr) {
var len = arr.length;
if(len == 1) {
return arr;
}
var mid = Math.floor(len / 2),
left = arr.slice(0, mid),
right = arr.slice(mid, len);
return merge(mergeSortRec(left), mergeSortRec(right));
}
function merge(left, right) {
var result = [],
il = 0,
ir = 0;
while(il < left.length && ir<right.length) {
if(left[il] < right[ir]) {
result.push(left[il]);
il++;
} else {
result.push(right[ir]);
ir++;
}
}
while(il < left.length) {
result.push(left[il]);
il++;
}
while(ir < right.length) {
result.push(right[ir]);
ir++;
}
return result;
}
/*快速排序*/
this.quickSort = function () {
quick(arr, 0, arr.length-1);
return this;
}
function quick(arr, left, right) {
var index;
if(arr.length > 1) {
index = partition(arr, left, right);
if(left < index -1) {
quick(arr, left, index - 1);
}
if(index < right) {
quick(arr, index, right);
}
}
}
function partition(arr, left, right) {
var pivot = arr[Math.floor((right + left) / 2)],
i = left,
j = right;
while(i <= j) {
while(arr[i] < pivot) {
i++;
}
while(arr[j] > pivot) {
j--;
}
if(i <= j) {
swapQuickSort(arr, i, j);
i++;
j--;
}
}
return i;
}
function swapQuickSort(arr, index1, index2) {
var temp = arr[index1];
arr[index1] = arr[index2];
arr[index2] = temp;
}
}
function test() {
// 0 1 2 3 4 5
// len = 6
var arr = [10, 2, 3, 7, 20, 4];
var arr_list = new ArrayList();
for(var i=0; i<arr.length; ++i) {
arr_list.insert(arr[i])
}
console.log("arr_list = ", arr_list.toString());
//console.log("arr_list.mergeSort = ", arr_list.mergeSort().toString());
console.log("arr_list.quickSort = ", arr_list.quickSort().toString());
}
test();
常用排序算法2--归并排序和快速排序
最新推荐文章于 2018-02-18 20:39:00 发布