JS中的各种排序方法

JavaScript013

JS中的各种排序方法,第1张

数据结构算法中排序有很多种,常见的、不常见的,至少包含十种以上。根据它们的特性,可以大致分为两种类型:比较类排序和非比较类排序

冒泡排序是一次比较两个元素,如果顺序是错误的就把它们交换过来。,直到不需要再交换

快速排序的基本思想是通过一趟排序,将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可以分别对这两部分记录继续进行排序,以达到整个序列有序

从数列中挑出一个元素,称为 “基准”(pivot);然后重新排序数列,所有元素比基准值小的摆放在基准前面、比基准值大的摆在基准的后面;在这个区分搞定之后,该基准就处于数列的中间位置;然后把小于基准值元素的子数列(left)和大于基准值元素的子数列(right)递归地调用 quick 方法排序完成,这就是快排的思路

通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入,从而达到排序的效果

插入排序的思路是基于数组本身进行调整的,首先循环遍历从 i 等于 1 开始,拿到当前的 current 的值,去和前面的值比较,如果前面的大于当前的值,就把前面的值和当前的那个值进行交换,通过这样不断循环达到了排序的目的

将最小的元素存放在序列的起始位置,再从剩余未排序元素中继续寻找最小元素,然后放到已排序的序列后面……以此类推,直到所有元素均排序完毕

堆排序是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质,即子结点的键值或索引总是小于(或者大于)它的父节点。堆的底层实际上就是一棵完全二叉树,可以用数组实现

归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并

通过 mid 可以把该数组分成左右两个数组,分别对这两个进行递归调用排序方法,最后将两个数组按照顺序归并起来

var arr=[2,4,5,3,5,3,0]

var arrvalue//用于存放取出的数组的值

for(var i=0i<arr.lengthi++){

arrvalue=arr[i]//数组的索引是从0开始的

console.log(arrvalue)//把取出的值打印在控制台上

}

扩展资料:

js 获取数组中的最大值和最小值

var arr = [3,12,23,18,25,33,22,30,1]

方案一: 思想 首先对数组进行排序(小 》大),第一项为最小值,最后一项为最大值

var min

var max

arr.soft(function(a,b){return a-b})

min = arr[0]

max = arr[arr.length-1]

方案二:采用Math对象里的min()方法和 max()方法,需要将比较的数一个一个的传递进来才能比较,但是可以通过以下方式转化即可;

var min = Math.min(arr)

console.log(min)   // NAN

console.log(Math.min(3,12,23,18,25,33,22,30,1))   // 1

console.log(Math.max(3,12,23,18,25,33,22,30,1))   // 33 

var min =eval("Math.min(" +arr.toString()+")")  // 1     采用字符串拼接

var min = eval("Math.max(" +arr.toString()+")")  // 33

var min = Math.min.apply(obj,arr)  // 1     利用apply方法一项一项传质的特点

var max =Math.max.apply(obj,arr)  // 33

你的程序完全错误,根本不可能排序,排序的一般程序是这样的:

<SCRIPT language=JavaScript>

var a=new Array(3)

a[0]=27

a[1]=17

a[2]=100

a.sort()

document.write(a+" ")

</SCRIPT>

如果要求结果是17、27、100这样的数字大小排序,应该使用下面的程序:

<SCRIPT language=JavaScript>

var a=new Array(3)

a[0]=27

a[1]=17

a[2]=100

a.sort(function(x,y){return parseInt(x)-parseInt(y)})

document.write(a+" ")

</SCRIPT>

要控制按照自己的规律进行排序,就得学会字节编写排序函数,我下面粘贴Array对象的sort方法说明,你看了就会明白,不明白再回头结合上面的例子。

Array 对象 sort 方法

描述:

返回一个元素已经进行了排序的 Array 对象。

语法:

arrayobj.sort(sortfunction)

sortfunction 参数是用来确定元素顺序的函数的名称。如果这个参数被省略,那么元素将按照 ASCII 字符顺序进行升序排列。

说明:

sort 方法将 Array 对象进行适当的排序;在执行过程中并不会创建新的 Array 对象。

如果为 sortfunction 参数提供了一个函数,那么该函数必须返回下列值之一:

负值,如果所传递的第一个参数比第二个参数小。

零,如果两个参数相等。

正值,如果第一个参数比第二个参数大。