常用排序算法2--归并排序和快速排序

来源:互联网 发布:情侣礼物知乎 编辑:程序博客网 时间:2024/05/18 18:55
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 = 6var 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();

原创粉丝点击