几种常见排序1

74 阅读1分钟

1.选择排序

即从第一个元素开始与后面元素相比较过程中,选择一个最小的与第一个元素交换,然后用第二个元素与后面元素进行比较,并进行交换。以此类推

let arr = [2,324,11,57,84,53,21,2,0,342,1,121,78];
var temp;
for(var i=0;i<arr.length-1;i++){ //每一趟排序都选出了最小的一个值,排在最前面
    for(var j=i+1;j<arr.length;j++){
        if(arr[i]>arr[j]){
            temp=arr[i];
            arr[i]=arr[j];
            arr[j]=temp;
        }
    }
}
// arr [0, 1, 2, 2, 11, 21, 53, 57, 78, 84, 121, 324, 342]

2.冒泡排序

冒泡排序:比较两个相邻的元素,将值大的元素交换至右端。就像烧开水一样,气泡大的往上冒。

//双层循环,外层控制排序趟数,内层控制每趟排序多少次;
var temp;
for(var i=0;i<arr.length-1;i++){
//每进行一趟排序,就会少比较一次,因为每进行一趟排序都会找出一个较大值。
    for(var j=0;j<arr.length-1-i;j++){
        if(arr[j]>arr[j+1]){
            temp=arr[j];
            arr[j]=arr[j+1];
            arr[j+1]=temp;
        }
    }
}

3.快速排序

选择一个关键值作为基准值。比基准值小的都在左边序列,比基准值大的都在右边。然后递归重复直至整体有序


function quickSort(arr){
    if(arr.length <= 1){
        return arr;
    }
    var left = [];
    var right = [];
    var midIndex = parseInt(arr.length / 2);
    var mid = arr[midIndex];
    for(var i = 0; i < arr.length; i++){//将数组分为小于基准值,大于基准值 两个数组
        if(i == midIndex) continue;
        if( arr[i] < mid){
            left.push(arr[i])
        }else{
            right.push(arr[i]);
        }
    }
    return quickSort(left).concat([mid],quickSort(right));
}
 

4.插入排序

从第二个位置开始比较,依次和前面的成员进行比较,如果小则交换位置。例如[1,2,3,5,4],4和5比小,于是4换到5的位置,4和3比不需要交换,则4和剩下的1,2,3就不用再比较了,因为前面循环时已经比较过,是有序的了。

let arr = [2,324,11,57,84,53,21,2,0,342,1,121,78];
for(var i=1;i<arr.length;i++){
    var n=i;
    while(arr[n]<arr[n-1] && n>0){
 	    var temp=arr[n];
	    arr[n]=arr[n-1];
 	    arr[n-1]=temp;
	    n--;
    }
}