知识大全 javascript的几种排序方法

Posted

篇首语:知识是使人类快乐的主要因素之一。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 javascript的几种排序方法相关的知识,希望对你有一定的参考价值。

  所谓排序 就是要整理文件中的记录 使之按关键字递增(或递减)次序排列起来 其确切定义如下   输入 n个记录R R … Rn 其相应的关键字分别为K K … Kn   输出 Ril Ri … Rin 使得Ki ≤Ki ≤…≤Kin (或Ki ≥Ki ≥…≥Kin)

  这里 我们简单介绍几种排序方法 直接插入排序 希儿排序 冒泡排序 快速排序 直接选择排序 文中所提及的代码在IE 下测试通过

  直接插入排序基本思想

  假设待排序的记录存放在数组R[ n]中 初始时 R[ ]自成 个有序区 无序区为R[ n] 从i= 起直至i=n为止 依次将R[i]插入当前的有序区R[ i ]中 生成含n个记录的有序区

  算法描述

 function InsertSort(arr) //插入排序 >直接插入法排序  var st = new Date();  var temp j;  for(var i= ; i<arr length; i++)    if((arr[i]) < (arr[i ]))     temp = arr[i];    j = i ;    do      arr[j+ ] = arr[j];     j ;        while (j> && (temp) < (arr[j]));    arr[j+ ] = temp;   //endif    status = (new Date() st) + ms ;  return arr; 

  希尔排序基本思想

  先取一个小于n的整数d 作为第一个增量 把文件的全部记录分成d 个组 所有距离为dl的倍数的记录放在同一个组中 先在各组内进行直接插人排序 然后 取第二个增量d <d 重复上述的分组和排序 直至所取的增量dt= (dt<dt l<…<d <d ) 即所有记录放在同一组中进行直接插入排序为止    该方法实质上是一种分组插入方法

  算法描述

  function ShellSort(arr) //插入排序 >希儿排序  var st = new Date();  var increment = arr length;  do    increment = (increment/ | ) + ;   arr = ShellPass(arr increment);    while (increment > )  status = (new Date() st) + ms ;  return arr;  function ShellPass(arr d) //希儿排序分段执行函数  var temp j;  for(var i=d; i<arr length; i++)    if((arr[i]) < (arr[i d]))     temp = arr[i]; j = i d;    do      arr[j+d] = arr[j];     j = j d;        while (j> && (temp) < (arr[j]));    arr[j+d] = temp;   //endif    return arr; 

  冒泡排序基本思想

  将被排序的记录数组R[ n]垂直排列 每个记录R[i]看作是重量为R[i] key的气泡 根据轻气泡不能在重气泡之下的原则 从下往上扫描数组R 凡扫描到违反本原则的轻气泡 就使其向上 飘浮 如此反复进行 直到最后任何两个气泡都是轻者在上 重者在下为止

  算法描述

 function BubbleSort(arr) //交换排序 >冒泡排序  var st = new Date();  var temp;  var exchange;  for(var i= ; i<arr length; i++)    exchange = false;   for(var j=arr length ; j>=i; j )     if((arr[j+ ]) < (arr[j]))      temp = arr[j+ ];     arr[j+ ] = arr[j];     arr[j] = temp;     exchange = true;          if(!exchange) break;    status = (new Date() st) + ms ;  return arr; 

  快速排序基本思想

  将原问题分解为若干个规模更小但结构与原问题相似的子问题 递归地解这些子问题 然后将这些子问题的解组合为原问题的解     在R[low high]中任选一个记录作为基准(Pivot) 以此基准将当前无序区划分为左 右两个较小的子区间R[low pivotpos )和R[pivotpos+ high] 并使左边子区间中所有记录的关键字均小于等于基准记录(不妨记为pivot)的关键字pivot key 右边的子区间中所有记录的关键字均大于等于pivot key 而基准记录pivot则位于正确的位置(pivotpos)上 它无须参加后续的排序

  算法描述

 function QuickSort(arr) //交换排序 >快速排序  if (arguments length> )    var low = arguments[ ];   var high = arguments[ ];  else    var low = ;   var high = arr length ;    if(low < high)   // function Partition   var i = low;   var j = high;   var pivot = arr[i];   while(i<j)     while(i<j && arr[j]>=pivot)     j ;    if(i<j)     arr[i++] = arr[j];    while(i<j && arr[i]<=pivot)     i++;    if(i<j)     arr[j ] = arr[i];   //endwhile   arr[i] = pivot;   // end function   var pivotpos = i; //Partition(arr low high);   QuickSort(arr low pivotpos );   QuickSort(arr pivotpos+ high);  else   return;   return arr; 

  直接选择排序基本思想

  n个记录的文件的直接选择排序可经过n 趟直接选择排序得到有序结果  ①初始状态 无序区为R[ n] 有序区为空  ②第 趟排序    在无序区R[ n]中选出关键字最小的记录R[k] 将它与无序区的第 个记录R[ ]交换 使R[ ]和R[ n]分别变为记录个数增加 个的新有序区和记录个数减少 个的新无序区   …… ③第i趟排序  第i趟排序开始时 当前有序区和无序区分别为R[ i ]和R[i n]( ≤i≤n ) 该趟排序从当前无序区中选出关键字最小的记录R[k] 将它与无序区的第 个记录R[i]交换 使R[ i]和R[i+ n]分别变为记录个数增加 个的新有序区和记录个数减少 个的新无序区     这样 n个记录的文件的直接选择排序可经过n 趟直接选择排序得到有序结果

  算法描述

 function SelectSort(arr) //选择排序 >直接选择排序  var st = new Date();  var temp;  for(var i= ; i<arr length; i++)    var k = i;   for(var j=i+ ; j<arr length; j++)     if((arr[j]) < (arr[k]))     k = j;      if (k != i)    temp = arr[i];    arr[i] = arr[k];    arr[k] = temp;       status = (new Date() st) + ms ;  return arr;  cha138/Article/program/Java/JSP/201311/19224

相关参考