您的位置:首页 > Web前端 > JavaScript

js 排序

2016-04-01 11:32 447 查看
1、冒泡排序:

随便从数组中拿一位数和后一位比较,如果是想从小到大排序,那么就把小的那一位放到前面,大的放在后面,简单来说就是交换它们的位置,如此反复的交换位置就可以得到排序的效果。 时间复杂度O(n^2)

var arr = [3,1,4,2,5,21,6,15,63];

function sortA(arr){

for(var i=0;i<arr.length-1;i++){

for(var j=i+1;j<arr.length;j++){

if(arr[i]>arr[j]){

var temp = arr[j];

arr[j] = arr[i];

arr[i] = temp;

}

}

}

return arr;

}

alert(sortA(arr));

2、快速排序:

从数组的中间拿一个值,然后通过这个值挨个和数组里面的值进行比较,如果大于的放一边,小于的放一边,然后把这些合并,再进行比较,如此反复即可。 时间复杂度为:O(nlogn)。

var arr = [3,1,4,2,5,21,6,15,63];

function sortA(arr){

if(arr.length<=1){

return arr;

}

var len = Math.floor(arr.length/2);

var cur = arr.splice(len,1);

var left = [];

var right = [];

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

if(cur>arr[i]){

left.push(arr[i]);

}else{

right.push(arr[i]);

}

}

return sortA(left).concat(cur,sortA(right));

}

alert(sortA(arr));

3、插入排序:

首先对前两个数据从小到大比较。接着将第三个数据与排好的前两个数据比较,将第三个数据插入合适的位置。以此类推。(插入排序有两个循环,外循环将数组挨个移动,内循环将对外循环选中的元素及他前面的数进行比较。) 时间复杂度O(n^2)

var arr = [3,1,4,2,5,21,6,15,63];

function insertSort(arr){

var len = arr.length;

if(len<=0){

return arr;

}

for(var i=1;i<len;i++){

var temp = arr[i];

var j = i;

while(j>0 && arr[j-1]>temp){

arr[j] = arr[j-1];

j--

}

arr[j] = temp;

}

return arr;

}

alert(insertSort(arr));

4、选择排序:

首先从原始数组中选择一个最小的数据,和第一个位置1的数据交换。再从剩下的n-1个数据中选择次小的数据,将其和第二个位置的数据交换。不断重复,直到最后两个数据完成交换。时间复杂度O(n^2)

var arr = [3,1,4,2,5,21,6,15,63];

function sortA(arr){

var len = arr.length;

for(var i=0;i<len-1;i++){

var min = i;

for(var j=i+1;j<len;j++){

if(arr[j]<arr[min]){

min = j;

}

}

swap(arr,min,i);

}

return arr;

}

function swap(arr,i,j){

var temp =arr[i];

arr[i]=arr[j];

arr[j]=temp;

}

alert(sortA(arr));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: