大家在数据结构中都学习到各种排序的方法,下面是关于js排序的几种方法,跟C语言数据结构中讲的大同小异,希望能够对大家的工作和学习有所帮助
1、直接插入排序基本思想
假设待排序的记录存放在数组R[1..n]中。初始时,R[1]自成1个有序区,无序区为R[2..n]。从i=2起直至i=n为止,依次将R[i]插入当前的有序区R[1..i-1]中,生成含n个记录的有序区。
算法描述
function InsertSort(arr) { //插入排序->直接插入法排序
var st = new Date();
var temp, j;
for(var i=1; i<arr.length; i++) {
if((arr[i]) < (arr[i-1])) {
temp = arr[i];
j = i-1;
do {
arr[j+1] = arr[j];
j--;
}
while (j>-1 && (temp) < (arr[j]));
arr[j+1] = temp;
}//endif
}
status = (new Date() - st) + ' ms';
return arr;
}
2、希尔排序基本思想
先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为dl的倍数的记录放在同一个组中。先在各组内进行直接插人排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。
该方法实质上是一种分组插入方法。
算法描述
function ShellSort(arr) { //插入排序->希儿排序
var st = new Date();
var increment = arr.length;
do {
increment = (increment/3|0) + 1;
arr = ShellPass(arr, increment);
}
while (increment > 1)
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>-1 && (temp) < (arr[j]));
arr[j+d] = temp;
}//endif
}
return arr;
}
3、冒泡排序基本思想
将被排序的记录数组R[1..n]垂直排列,每个记录R[i]看作是重量为R[i].key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上"飘浮"。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。
算法描述
function BubbleSort(arr) { //交换排序->冒泡排序
var st = new Date();
var temp;
var exchange;
for(var i=0; i<arr.length; i++) {
exchange = false;
for(var j=arr.length-2; j>=i; j--) {
if((arr[j+1]) < (arr[j])) {
temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
exchange = true;
}
}
if(!exchange) break;
}
status = (new Date() - st) + ' ms';
return arr;
}
4、快速排序基本思想
将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。
在R[low..high]中任选一个记录作为基准(Pivot),以此基准将当前无序区划分为左、右两个较小的子区间R[low..pivotpos-1)和R[pivotpos+1..high],并使左边子区间中所有记录的关键字均小于等于基准记录(不妨记为pivot)的关键字pivot.key,右边的子区间中所有记录的关键字均大于等于pivot.key,而基准记录pivot则位于正确的位置(pivotpos)上,它无须参加后续的排序。
算法描述
function QuickSort(arr) { //交换排序->快速排序
if (arguments.length>1) {
var low = arguments[1];
var high = arguments[2];
} else {
var low = 0;
var high = arr.length-1;
}
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-1);
QuickSort(arr, pivotpos+1, high);
} else
return;
return arr;
}
5、直接选择排序基本思想
n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果:
①初始状态:无序区为R[1..n],有序区为空。
②第1趟排序
在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
……
③第i趟排序
第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R[i..n](1≤i≤n-1)。该趟排序从当前无序区中选出关键字最小的记录R[k],将它与无序区的第1个记录R[i]交换,使R[1..i]和R[i+1..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
这样,n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果。
算法描述
function SelectSort(arr) { //选择排序->直接选择排序
var st = new Date();
var temp;
for(var i=0; i<arr.length; i++) {
var k = i;
for(var j=i+1; 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;
}
分享到:
相关推荐
以上就是JavaScript中常用的几种排序方法。理解并熟练运用它们,能够帮助你在处理数据时更加游刃有余。在实际项目中,可以根据具体需求选择合适的方法,或者利用现有的库和工具提高代码的可读性和可维护性。
设计一个测试程序比较几种内部排序算法的关键字比较次数和移动次数以取得直观感受。 在本文中,我们将设计一个测试程序比较几种内部排序算法的关键字比较次数和移动次数,以取得直观感受。内部排序算法是指在内存中...
要对JavaScript对象的属性进行排序,可以采取以下几种方法: 1. **转换为数组并排序**:将对象的属性名转化为数组,然后利用数组的`sort()`方法进行排序。例如: ```javascript let obj = {c: 3, a: 1, b: 2}; ...
JavaScript(简称JS)是一种广泛用于网页和网络应用的编程语言,尤其在前端开发中起着核心作用。在处理中文数据时,我们有时需要对中文字符串按照拼音进行排序,例如姓名排序,这在中文用户界面中非常常见。JS中文...
在JavaScript中,你可以使用多种方法来实现数据排序。最常用的方法是使用数组的 sort() 方法...压缩包文档记录了几种排序方式,分别是: 数字数组的排序、对象数组的排序、降序排序、字符串数组的排序、复杂排序逻辑。
总之,JavaScript的sorttable库提供了一种高效、灵活且易于定制的方式来实现表格排序,无论是在桌面端还是移动端,都能为用户带来流畅的交互体验。通过掌握和运用这一工具,开发者可以提升网页应用的数据管理能力,...
原生的Datatable.js库在某些情况下可能无法满足特定的前端排序需求,可能是由于其内置的排序算法不适用于特定的数据结构,或者与项目中的其他JavaScript库产生了冲突,导致控制逻辑变得复杂。在这种情况下,重写...
冒泡排序是一种简单的交换排序方法,它的基本思想是通过重复遍历待排序的数组,依次比较相邻元素,如果它们的顺序错误就把它们交换过来。遍历数组的工作是重复地进行直到没有再需要交换,也就是说该数组已经排序完成...
JavaScript(简称JS)是一种轻量级的脚本语言,常用于网页交互和动态网页开发。在本教程中,我们将探讨如何实现高级表格排序功能。在网页中,表格是一种常见的数据展示方式,尤其当数据量较大时,排序功能就显得尤为...
在JavaScript(JS)中,对表格数据进行排序是一项常见的任务,尤其在网页开发中,它能让用户更加方便地浏览和理解信息。这个场景下提到的"JS 做的表格数据排序"很可能是利用JavaScript库或者自定义的函数来实现的。...
本篇文章将详细探讨JavaScript中几种常见的排序算法及其实现。 1. **冒泡排序**: 冒泡排序是最基础的排序算法之一,通过不断交换相邻的不正确顺序元素来逐步完成排序。它的时间复杂度为O(n^2),在大数据量时效率...
js冒泡排序的几种写法,如果要面试,可以借鉴一下
这个名为“各种排序方法演示Java小程”的压缩包文件显然包含了用Java实现的各种排序算法的示例代码,同时与JavaScript标签相关联,可能意味着这些示例也可能适用于JavaScript环境,或者至少可以作为理解排序算法原理...
JavaScript为数组提供了内置的sort()方法,但有时候为了满足特定的需求,我们需要自定义排序方法。本文将详细介绍JavaScript中自定义数组排序方法的原理与实现技巧。 首先,我们需要知道JavaScript中数组sort()方法...
在JavaScript中,数组的排序可以使用`Array.prototype.sort()`方法。这个方法接受一个比较函数作为参数,用于决定元素的排列顺序。比较函数一般有两个参数,如果返回值小于0,那么第一个参数应该排在第二个参数前面...
`jsp页面表格排序 js文件`的核心在于JavaScript的实现,这可能包括以下几个关键技术点: 1. **DOM操作**:JavaScript通过Document Object Model (DOM)与HTML页面交互,修改表格结构。当用户点击表格的列头时,我们...
本篇将深入探讨几种常见的排序算法,并以JavaScript实现为例,帮助你理解和掌握这些算法。 1. 冒泡排序(Bubble Sort) 冒泡排序是最基础的排序算法之一,它通过不断地交换相邻的错误顺序元素来逐步排序数组。每一...
桶排序(Bucket Sort)是一种分布式排序算法,它将元素分布到多个称为桶的容器中,然后单独对每个桶进行排序。最终再将各个桶中的元素合并,得到排序后的数组。桶排序特别适合用于分布式场景,比如分布式计算环境下...
在实现表格排序时,JavaScript主要涉及以下几个知识点: 1. **事件监听**:添加点击事件监听到表头,当用户点击某一列时触发排序功能。 2. **DOM操作**:使用`document.querySelector`或`document....