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