忘记了快速排序的思路是怎样的了,复习一下,写了两个实例,发表博文备忘。
对于快速排序的思想,可以参考白话经典算法系列之六 快速排序 快速搞定,讲得比较通俗
prototype扩展的方式
12345678910111213141516171819202122232425262728293031323334 |
/** * 对Array对象的原型扩展来实现快速排序 * @param [left] 排序开始位置 * @param [right] 排序结束位置 * @returns {Array} */Array.prototype.quickSort = function(left, right){ if(left === undefined) left = 0; //若left和right为空,设置初始值 if(right === undefined) right = this.length - 1; if(left < right){ var ref = this[left]; var low = left; var high = right; while(low < high){ //从右往左查询比ref小的值 while(low < high && this[high] > ref){ --high; } this[low] = this[high]; //从左往右查询比ref大的值 while(low < high && this[low] < ref){ ++low } this[high] = this[low]; } this[low] = ref; this.quickSort(low+1, right); this.quickSort(left, low-1); } return this;}; var arr1 = [95,8,65,98,54,25,3,654,4,74,63,88,35,68];console.log(arr1.quickSort()); |
非prototype方式
12345678910111213141516171819202122232425 |
/** * @param array //要排序的数组 * @returns {Array} //排完序的数组 */var quicksort = function(array){ if(!array.length) return array; var low = 0; var high = array.length - 1; var ref = array[low]; while(low < high){ while(low < high && array[high] > ref){ --high; } array[low] = array[high]; while(low < high && array[low] < ref){ ++low } array[high] = array[low]; } array[low] = ref; return quicksort(array.slice(0,low)).concat([ref],quicksort(array.slice(low+1, array.length)));}; var arr2 = [95,8,65,98,54,25,3,654,4,74,63,88,35,68];console.log(quicksort(arr2)); |
原文地址:https://www.cnblogs.com/sanxiandoupi/p/11658773.html
时间: 2024-10-30 13:59:26