关于数组的那些事-数组排序

来源:互联网 发布:视频网络编码器价格 编辑:程序博客网 时间:2024/06/16 11:13

数组排序的方法一大堆,常见的数组排序算法有:

1.快速排序从给定的数据中,随机抽出一项,这项的左边放所有比它小的,右边放比它大的,然后再分别这两边执行上述操作,采用的是递归的思想,总结出来就是 实现一层,分别给两边递归,设置好出口);

2.插入排序在已经排好序的数组中插入到相应的位置,以从小到大排序为例,扫描已经排好序的片段的每一项,如大于,则继续往后,直到他小于一项时,将其插入到这项的前面);

3.冒泡排序一个个冒泡到最前端或者最后端,主要是通过两两依次比较,以升序为例,如果前一项比后一项大则交换顺序,一直比到最后一对);

4.选择排序将当前未确定块的min或者max取出来插到最前面或者后面


我这里分享的是插入排序

先介绍下我的做法:

从数组中每次取出一个数来跟在它之前的数字依次对比.
当这个数字比前面的数字都大时不作处理.
当这个数字遇到比它大的数字时,我们便将这个数字插入到比它大的那个数字前面.
以此思路我们便可以完成插入排序的做法. 

var arr=[5,45,31,122,54,22,124,83,0,23];for (var i=1;i<arr.length;i++) {for (var j=0;j<i;j++) {if (arr[i] > arr[j]) {}else{//此时第i项  比 第j项 小  ==> 要将第i项插入到第j项之前。var sum=arr[i];//先存下需要进行移动的这个数,因为后面要进行删除操作//从数组第i项arr[i]开始(splice方法的第一个参数包括第i项)移除1(splice的第二个参数)项。arr.splice(i,1);//splice方法会将数字sum插入到第j项之前。//详细的splice使用方法介绍自己去了解,这里就不多解释了。arr.splice(j,0,sum);break;}}}document.write(arr);

如例子中所示:


当i=2时,将arr[2]与arr[j]对比。即将arr[2]依次与arr[0]、arr[1]对比。
arr[2]为31,此时的arr[2]比arr[0]大,但是比arr[1]小。
所以进入我们的else语句(此时i=2,j=1。)
先存下arr[i]这个数字,再将arr[i]这个数字从原数组中去除。
之后将去除的这个数字插入到数组的指定位置中去。
例:==>将arr[i](即arr[2])这个数字插入到arr[j](即arr[1])这个数组之前。
然后使用break跳出当前的这层for循环。

之后继续用for循环i来进行数组的排序

0 0
原创粉丝点击