知识大全 JS实现随机化快速排序

Posted 元素

篇首语:知识是抵御一切灾祸的盾牌。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 JS实现随机化快速排序相关的知识,希望对你有一定的参考价值。

JS实现随机化快速排序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  算法的平均时间复杂度为O(nlogn) 但是当输入是已经排序的数组或几乎排好序的输入 时间复杂度却为O(n^ ) 为解决这一问题并保证平均时间复杂度为O(nlogn)的方法是引入预处理步骤 它惟一的目的是改变元素的顺序使之随机排序 这种预处理步骤可在O(n)时间内运行 能够起到同样作用的另一种简单方法是在算法中引入一个随机元素 这可以通过随机地选择拆分元素的主元来实现 随机选择主元的结果放宽了关于输入元素的所有排列的可能性相同的步骤 引入这一步来修正原先的快速排序 可得到下面所示的随机化快速排序 新算法只是在区间[low…high]中一致随机地选择一个索引v 并将A[v]和A[low]交换 然后按照原来的快速排序算法继续 这里 parseInt(Math random()*(high low+ ) + low)返回一个在low和high之间的数

  /****************************************

  算法 split

  输入 数组A[low high]

  输出

   若有必要 输出按上述描述的重新排列的数组A;

   划分元素A[low]的新位置w;

  ****************************************/

  function split(array low high)

  var i = low;

  var x = array[low];

  for(var j = low + ; j <= high; j++)

  if(array[j] <= x)

  i ++;

  if(i != j)

  var temp = array[i];

  array[i] = array[j];

  array[j] = temp;

  

  

  

  temp = array[low];

  array[low] = array[i];

  array[i] = temp;

  return i;

  

  /****************************************

  算法 rquicksort

  输入 A[ n ]

  输出 按非降序排列数组A[ n ]

  rquicksort(A n );

  ****************************************/

  function rquicksort(array low high)

  if(low < high)

  /******随机化拆分元素的主元*******/

  var v = parseInt(Math random()*(high low+ ) + low);

  var tmp = array[low];

  array[low] = array[v];

  array[v] = tmp;

  /******随机化拆分元素的主元*******/

  var w = split(array low high);

  rquicksort(array low w );

  rquicksort(array w + high);

  return array;

  

  

  var array = [ ];

  array = rquicksort(array array length );

cha138/Article/program/Java/JSP/201311/20538

相关参考

知识大全 js函数排序的实例代码

这篇文章介绍了js函数排序的代码有需要的朋友可以参考一下 复制代码代码如下:varas=[];assort();//这个排序是按照字典排序//自定义按照数字排序functionsortByN

知识大全 js 图片随机不定向浮动的实现代码

这篇文章介绍了js图片随机不定向浮动的实现代码有需要的朋友可以参考一下 复制代码代码如下:cha138/Article/program/Java/JSP/201311/20126

知识大全 JS随机生成不重复数据的实例方法

JS随机生成不重复数据的实例方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  昨天晚上在IBM

知识大全 JS 代码实例:实现随机加载不同的CSS样式

JS代码实例:实现随机加载不同的CSS样式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  随机载

知识大全 js jquery获取随机生成id的服务器控件的3种方法

cha138/Article/program/Java/JSP/201311/20085

知识大全 排序 - 交换排序 - 快速排序 (一)

  快速排序(QuickSort)  算法思想  快速排序是CRAHoare于年提出的一种划分交换排序它采用了一种分治的策略通常称其为分治法(Divideand  ConquerMethod)  ()

知识大全 交换排序之快速排序

快速排序  快速排序(QuickSort)通过一趟排序将待排记录分割成独立的两部分其中一部分记录的关键字均比另一部分记录的关键字小则可分别对这两部分记录继续进行排序以达到整个序列有序快速排序三个步骤 

知识大全 排序 - 交换排序 - 快速排序 (三)

  快速排序执行过程  快速排序执行的全过程可用递归树来描述  >  >  分析  ()递归执行的路线如图中带箭头的包络线所示  ()递归树上每一结点左旁方括号表示当前待排序的区间结点内的关键字是划分

知识大全 排序 - 交换排序 - 快速排序 (四)

  算法分析  快速排序的时间主要耗费在划分操作上对长度为k的区间进行划分共需k次关键字的比较  ()最坏时间复杂度  最坏情况是每次划分选取的基准都是当前无序区中关键字最小(或最大)的记录划分的结果

知识大全 排序 - 交换排序 - 快速排序 (二)

  划分算法Partition  ()简单的划分方法  ①具体做法  第一步(初始化)设置两个指针i和j它们的初值分别为区间的下界和上界即i=lowi=high;选取无序区的第一个记录  R[i](即