1.冒泡排序
function bubbleSort(arr) {
var len = arr.length;
for(var i=0; i<len; i++) {
for(var j=0; j<len-i; j++) {
if(arr[j+1]<arr[j]){
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
return arr;
}
每次比较把最大的放在最后面,每次少比较一个
2.插入排序
function insertSort(arr) {
for(let i=1; i<arr.length; i++) {
cur = arr[i];
pre = i-1;
while(pre>=0 && cur<arr[pre]){
arr[pre+1] = arr[pre];
pre--;
}
arr[pre+1] = cur;
}
return arr;
}
从下标1开始,和前面的比,比前面的小就放到前面。
3.希尔排序
function shellSort(arr) {
var gap = parseInt(arr.length/2);
while(gap>0){
for(let i=gap; i<arr.length; i++) {
cur = arr[i];
pre = i-gap;
while(pre>=0 && cur<arr[pre]){
arr[pre+gap] = arr[pre];
pre = pre - gap;
}
arr[pre+gap] = cur;
}
gap = parseInt(gap/2);
}
return arr;
}
将待排序的序列分成若干个子序列,将子序列进行插入排序,再对全体进行一次插入排序
4.快速排序
function quickSort(arr) {
if (arr.length <= 1) { return arr; }
var index = Math.floor(arr.length/2);
var target = arr.splice(index, 1)[0];
var left = [];
var right =[];
for (let i=0; i<arr.length; i++) {
if(arr[i]<=target){
left.push(arr[i]);
}else{
right.push(arr[i]);
}
}
return [...quickSort(left), target ,...quickSort(right)];
//return quickSort(left).concat([pivot],quickSort(right));
}
5.选择排序
function selsetSort(arr){
var index;
for(let i=0; i<arr.length; i++) {
index = i;
for(let j=i+1; j<arr.length;j++) {
if(arr[index]>arr[j]){ //找每一次遍历比i最小的
index = j; //保存最小的索引
}
}
if(index!=i){
let temp = arr[i];
arr[i] = arr[index];
arr[index] = temp;
}
}
return arr;
}
每次找到最小值,与第一个元素交换。
6.归并排序
function merge(left, right){
var re = [];
while(left.length>0&&right.length>0){
if(left[0]<right[0]) {
re.push(left.shift());
}else{
re.push(right.shift());
}
}
return re.concat(left).concat(right);
}
function mergeSort(arr){
if(arr.length==1) return arr;
var mid = Math.floor(arr.length/2);
var left = arr.slice(0,mid);
var right = arr.slice(mid);
return merge(mergeSort(left), mergeSort(right));
}
var arr = [48,1,5,9,6,3,8,7];
var a = mergeSort(arr);
console.log(a);