知识大全 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相关参考