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

js实现各种排序总结

2016-09-05 17:20 337 查看
1.冒泡排序

冒泡排序是最普通的一种排序了,也是时间复杂度最高的,排序过程如下图:



代码如下:

var sortData = function(data){
var length = data.length;
for (var i=0; i<length; i++){
for(var j=0; j<length-i-1; j++){
if(data[j]>data[j+1]){
var index = data[j];
data[j] = data[j+1];
data[j+1] = index;
}
}
}
return data;
}


2.选择排序

选择排序的本质就是每次循环中找到本次循环的最小值的位置minIndex,然后判断minIndex是否为本次循环的开头第一个位置,如果不是,交换两个值。如图:



代码如下:

var selectionSort = function(data){
var length = data.length,
indexMin;
for(var i=0;i<length;i++){
indexMin = i;
for(var j=i;j<length;j++){
if(data[indexMin] > data[j]){
indexMin = j;
}
}
if(i !== indexMin){
var index = data[i];
data[i] = data[indexMin];
data[indexMin] = index;
}
}
return data;
}


3.插入排序

插入排序思想是,规定第一个值已经排序,然后判断第二项的值是否大于第一项的值,然后换位,接下来判断第三项的值与前两项值得比较,依此类推,如图:



代码如下:

var insertSort = function(data){
var length = data.length,
j, temp;
for(var i=1;i<length;i++){
j = i;
temp = data[i];
while(j>0 && data[j-1]>temp){
data[j]=data[j-1];
j--;
}
data[j] = temp;
}
return data;
}


4.归并排序

其思想是将原始数组切分成较小的数组,直到每个小数组只有一

个位置,接着将小数组归并成较大的数组,直到最后只有一个排序完毕的大数组,如图:



代码如下:

var mergeSort = function(data){
var length = data.length;
if(length === 1){
return data;
}
var mid = Math.floor(length / 2),
left = data.slice(0, mid),
right = data.slice(mid, length);
return merge(mergeSort(left), mergeSort(right));
}
var merge = function(left, right){
var result = [],
il = 0,
ir = 0;
while(il<left.length && ir <right.length){
if(left[il] <right[ir]){
result.push(left[il++]);
} else{
result.push(right[ir++]);
}
}
while(il<left.length){
result.push(left[il++]);
}
while(ir<right.length){
result.push(right[ir++]);
}
return result;
}


5.快速排序

(1) 首先,从数组中选择中间一项作为主元。

(2) 创建两个指针,左边一个指向数组第一个项,右边一个指向数组最后一个项。移动左指

针直到我们找到一个比主元大的元素,接着,移动右指针直到找到一个比主元小的元素,然后交

换它们,重复这个过程,直到左指针超过了右指针。这个过程将使得比主元小的值都排在主元之

前,而比主元大的值都排在主元之后。这一步叫作划分操作。

(3) 接着,算法对划分后的小数组(较主元小的值组成的子数组,以及较主元大的值组成的

子数组)重复之前的两个步骤,直至数组已完全排序。



代码如下:

var quickSort = function(data){
if(data.length<=1) return data;
var pivotIndex = Math.floor(data.length/2);
var pivot = data.splice(pivotIndex, 1)[0];
var left=[],right=[];
for(var i=0;i<data.length;i++){
if(data[i]<pivot){
left.push(data[i])
}else{
right.push(data[i])
}
}
return quickSort(left).concat([pivot],quickSort(right));
}


还有二分排序,计数排序,堆排序,突然发现排序算法有这么多……………..

各位看官,点这里哟
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript 排序