快速排序,又称划分交换排序。以分治法为策略实现的快速排序算法。 本文主要要谈的是利用javascript实现in-place思想的快速排序 分治法: 在计算机科学中,分治法是建基于多项分支递归的一种很重要的算法范式。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。(摘自维基百科) 快速排序的思想 数组中指定一个元素作为标尺...
以var a = [4,2,6,3,1,9,5,7,8,0];为例子。 1.希尔排序。 希尔排序是在插入排序上面做的升级。是先跟距离较远的进行比较的一些方法。 function shellsort(arr){ var i,k,j,len=arr.length,gap = Math.ceil(len/2),temp; while(gap>0){ for (var k = 0; k < gap; k++) { var tagArr = []; tagArr.push(arr[k]) for (i = k+gap; i < len; i=i+gap) { temp = arr[i]; tagArr.push(temp); for (j=i-gap; j >-1; j=j-gap) { if(a...
本文为大家分享了js数组冒泡排序、快速排序的实现原理,供大家参考,具体内容如下 1、冒泡排序:随便从数组中拿一位数和后一位比较,如果是想从小到大排序,那么就把小的那一位放到前面,大的放在后面,简单来说就是交换它们的位置,如此反复的交换位置就可以得到排序的效果。 var arr = [3,1,4,2,5,21,6,15,63];function sortA(arr){for(var i=0;i<arr.length-1;i++){for(var j=i+1;j<arr.length;j++){//获取第一个值和后一个值比...
目前,最常见的排序算法大概有七八种,其中"快速排序"(Quicksort)使用得最广泛,速度也较快。它是图灵奖得主C. A. R. Hoare(1934--)于1960时提出来的。 "快速排序"的思想很简单,整个排序过程只需要三步: (1)在数据集之中,选择一个元素作为"基准"(pivot)。 (2)所有小于"基准"的元素,都移到"基准"的左边;所有大于"基准"的元素,都移到"基准"的右边。 (3)对"基准"左边和右边的两个子集,不断重复第一步和第二步,直到...
本文实例对比了javascript与Python快速排序实现方法。分享给大家供大家参考。具体如下: js实现方法:function quicksort(arr) {if (arr.length <= 1) return arrreturn quicksort(arr.filter(function (lt, i) {return i > 0 && lt < arr[0]})).concat([arr[0]]).concat(quicksort(arr.filter(function(ge, i) {return i > 0 && ge >= arr[0]}))) } python实现方法: def quicksort(arr):if len(arr) <= 1: return arrreturn quic...
本文实例讲述了JavaScript实现快速排序的方法。分享给大家供大家参考。具体实现方法如下: <html> <head> <script>function quickSort(input) {if (input.length <= 1) return input;var pivot = Math.floor(Math.random()*input.length)var less = [], greater=[];var pivotElem = input.splice(pivot,1)for (x in input) {if (input[x] <= pivotElem[0])less.push(input[x])elsegreater.push(input[x])}return [].concat(quickSo...
快速排序是对冒泡排序的一种改进。通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,最终达到整个数据变成有序序列。 假设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为基准数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为...
排序的方法有很多,本节介绍的是使用数组的push方法完成快速排序function quickSort(arr){if(arr.length <= 1) return arr;//判断是否有效数组var cut = Math.floor(arr.length/2);//取中间下标var left = [],right = [];var num = arr.splice(cut,1)[0];//取基准值for(var i = 0;i < arr.length;i ++){if(arr[i] < num){left.push(arr[i]);//小的放左边}else {right.push(arr[i]);//大的放右边}}return quickSort(left).concat(nu...
但是有不少的书本讲得并不是很清楚,而且不同的教材的实现方式也不尽相同,我这里将最简单的快速排序的思路写出来供大家参考。 希望不管是使用什么语言都能从这个简单的代码里很方便的掌握快排思路与编写方式 代码如下:function quick_sort(list, start, end) { if (start < end) { var pivotpos = partition(list, start, end); //找出快排的基数 quick_sort(list, start, pivotpos - 1); //将...
算法的平均时间复杂度为O(nlogn)。但是当输入是已经排序的数组或几乎排好序的输入,时间复杂度却为O(n^2)。为解决这一问题并保证平均时间复杂度为O(nlogn)的方法是引入预处理步骤,它惟一的目的是改变元素的顺序使之随机排序。这种预处理步骤可在O(n)时间内运行。能够起到同样作用的另一种简单方法是在算法中引入一个随机元素,这可以通过随机地选择拆分元素的主元来实现。随机选择主元的结果放宽了关于输入元素的所有排列的可能性...
简述: 用到javascript的排序一组数字,js没有直接的数字比较的函数可以调用,所以自己写了一个快速排序 知识点: 1. 正则表达式提取正负数字的string 2. str 转数字 放回列表 3. js的对象Sort类的声明及定义 4. Sort类构造函数、成员函数定义方式(prototype) 5. 快速排序算法 代码: 代码如下:<!DOCTYPE html> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />. <html> <title>Quick Sort</title> <head...
核心代码: 代码如下:function quickSort(arr){ //如果数组只有一个数,就直接返回; if(arr.length<1){ return arr; } //找到中间的那个数的索引值;如果是浮点数,就向下取整 var centerIndex = Math.floor(arr.length/2); //根据这个中间的数的索引值,找到这个数的值; var centerNum = arr.splice(centerIndex,1); //存放左边的数 var arrLeft = []; //存放右边的数 var arrRight = []; for(i=0;i<arr.length;i++){ if(arr[i...
1. PHP 代码如下:<?php $unsorted = array(2,4,5,63,4,5,63,2,4,43); function quicksort($array) { if (count($array) == 0) return array(); $pivot = $array[0]; $left = $right = array(); for ($i = 1; $i < count($array); $i++) { if ($array[$i] < $pivot) $left[] = $array[$i]; else $right[] = $array[$i]; } return array_merge(quicksort($left), array($pivot), quicksort($right)); } $sorted = quicksort($unsort...
按所推荐的程序在IE下跑了下,的确,排序耗时很小。 代码如下:<script> /* * 洗牌 */ function getRandomPlayCard(m){ var array1=new Array(m); for(var i=0;i<m;i++){ var rnd=Math.floor(Math.random()*(i+0.99999)) array1[i]=array1[rnd]; array1[rnd]=i; } return array1; }; /* * 快速排序,按某个属性,或按“获取排序依据的函数”,来排序. * @method soryBy * @static * @param {array} arr 待处理数组 * @param {strin...
function quickSort() { function doSort(a,s,e) { if(stemp); if(s>e)break; var tem=a[s]; a[s]=a[e]; a[e]=tem; } a[st]=a[e]; a[e]=temp; return e; } doSort(this,0,this.length-1); return this; } Array.prototype.quickSort=quickSort; alert(new Array(5,2,4,6,1).quickSort()); [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行] 代码如下:再你多快,你快不过Array.prototype.sort var a=[4,723,3,...