js 排序

来源:互联网 发布:周星驰 知乎 编辑:程序博客网 时间:2024/06/05 16:00

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));

0 0
原创粉丝点击