数组排序的方法一大堆,常见的数组排序算法有:
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来进行数组的排序