冒泡
时间复杂度:o(n2)最好时为(o(n))稳定
function sort(arr){
for (var i=0;i<arr.length-1;i++) {
var flag=true;
for (var j=i;j<arr.length-i-1;j++) {
if (arr[j]>arr[j+1]) {
var temp =arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
flag=false;
}
if (flag) {
break
}
}
}
return arr;
}
归并排序:
时间复杂度o(nlogn),空间o(n)
function merSort(arr){
if (arr.length<=1) {
return arr;
}
var left=arr.slice(0,Math.floor(arr.length/2));
var right=arr.slice(Math.floor(arr.length/2));
return mer(merSort(left),merSort(right));
}
function mer(left,right){
var result=[];
while (left.length&&right.length){
if (left[0]>right[0]) {
result.push(right.shift())
}else{
result.push(left.shift())
}
}
while (left.length){
result.push(left.shift())
}
while (right.length){
result.push(right.shift())
}
return result;
}
选择排序
和冒泡一样 序列5 8 5 2 9,第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法。
function sort(arr){
for (var i=0;i<arr.length;i++) {
var min=i;
for (var j=i+1;j<arr.length;j++) {
if (arr[min]>arr[j]) {
min=j;
}
}
var temp=arr[i];
arr[i]=arr[min];
arr[min]=temp;
}
return arr;
}
插入排序
o(n2)最好o(n1)稳定
function sort(array) {
for(var i = 1; i < array.length; i++) {
var key=array[i];
j=i-1;
while (array[j]>key){
array[j+1]=array[j];
j--;
}
array[j+1]=key;
}
return array;
}
快排
最差o(n2)其他都是o(nlogn)不稳定
function sort(array) {
if (array.length<=1) {
return array;
}
var left=[];
var right=[];
var center=Math.floor(array.length/2);
var centerVal=array.splice(center,1)
for (var i=0;i<array.length;i++) {
if (array[i]<centerVal) {
left.push(array[i])
}else{
right.push(array[i])
}
}
return sort(left).concat(centerVal,sort(right))
}