排序方法,合并排序 、快速排序
2018-02-23 17:20
363 查看
1.合并排序
function mergeSort(myArray) {if (myArray.length < 2) {
return myArray;
}
var middle = Math.floor(myArray.length / 2),
left = myArray.slice(0, middle),
right = myArray.slice(middle),
params = merge(mergeSort(left), mergeSort(right));
// 在返回的数组头部,添加两个元素,第一个是0,第二个是返回的数组长度
params.unshift(0, myArray.length);
// splice用来替换数组元素,它接受多个参数,
// 第一个是开始替换的位置,第二个是需要替换的个数,后面就是所有新加入的元素。
// 因为splice不接受数组作为参数,所以采用apply的写法。
// 这一句的意思就是原来的myArray数组替换成排序后的myArray
myArray.splice.apply(myArray, params);
// 返回排序后的数组
return myArray;
}
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++]);
} else {
result.push(right[ir++]);
}
}
return result.concat(left.slice(il)).concat(right.slice(ir));
}
var arr = [12, 33, 54, 35, 4, 6, 98, 9, 5, 7, 3, 6, 14, 6, 145, 1, 235];
console.log("mergeSort",mergeSort(arr));
2.快速排序
function swap(myArray, firstIndex, secondIndex) {var temp = myArray[firstIndex];
myArray[firstIndex] = myArray[secondIndex];
myArray[secondIndex] = temp;
}
function partition(myArray, left, right) {
var pivot = myArray[Math.floor((right + left) / 2)],
i = left,
j = right;
while (i <= j) {
while (myArray[i] < pivot) {
i++;
}
while (myArray[j] > pivot) {
j--;
}
if (i <= j) {
swap(myArray, i, j);
i++;
j--;
}
}
return i;
}
function quickSort(myArray, left, right) {
if (myArray.length < 2) return myArray;
left = (typeof left !== "number" ? 0 : left);
right = (typeof right !== "number" ? myArray.length - 1 : right);
var index = partition(myArray, left, right);
if (left < index - 1) {
quickSort(myArray, left, index - 1);
}
if (index < right) {
quickSort(myArray, index, right);
}
return myArray;
}
console.log(quickSort(arr));
相关文章推荐
- 排序的几种方法(合并,快速,冒泡排序)
- 各种排序方法(冒泡,快速,插入,选择),二分查找
- 【快速排序、合并排序与分治思想】
- php:快速排序的两种方法
- 快速排序三种实现方法
- 快速排序List的通用方法
- 快速排序模板方法,只实现了int比较的仿函数
- leetCode 88.Merge Sorted Array (合并排序数组) 解题思路和方法
- MTS格式快速合并方法
- JAVA 数组的排序方法冒泡、选择、快速、数组递增
- C++实现几种常用的时间复杂度为O(nlogn)的排序方法:归并排序、快速排序、堆排序、希尔排序
- 快速排序的两种改进方法算法及topK问题求解
- 六种排序方法的学习(直接插入、希尔、冒泡、快速、选择、归并)
- 快速排序List的通用方法
- 排序都有哪几种方法?请列举。用JAVA实现一个快速排序。
- 快速排序方法
- 学习笔记:快速排序的C++、JavaScript(2种方法)、Java实现
- 普林斯顿公开课 算法1-10:并查集-优化的快速合并方法
- 快速排序的各种方法
- leetCode 21.Merge Two Sorted Lists (合并排序链表) 解题思路和方法