随机初始化数组项 

//随机生成20项初始化数组
var arr = [];
for(var i=0; i<20; i++){
	arr[i] = Math.floor(Math.random()*21);
}     
选择排序
for(var i=0; i<arr.length; i++){
	//最小值下标
	var minId = i;
	for(var j=i+1; j<arr.length; j++){
		if(arr[minId] > arr[j]){
			//最小值
			minId = j;
		}
	}//内层循环一趟之后 一定可以拿到最小项的下标  minId
	//判断最小项下标  和 当前项下标 是否不同  如果不同 就交换, 如果相同,就不换
	if(i != minId){
		var temp = arr[i];
		arr[i] = arr[minId];
		arr[minId] = temp;
	}
}

/*for(var i=0; i<arr.length; i++){
	for(var j=i+1; j<arr.length; j++){
		if(arr[i]>arr[j]){
			var temp = arr[i];
			arr[i] = arr[j];
			arr[j] = temp;
		}
	}
}*/
console.log('选择排序算法');
console.log(arr);  

图解: 

一篇文章学会常用排序方法_javascript

冒泡排序
for(var i=0; i<arr.length-1; i++){	//n个数排序,只用进行arr.length-1趟
	for(var j=0; j<arr.length-1-i; j++){
		if(arr[j]>arr[j+1]){
			var temp = arr[j];
			arr[j] = arr[j+1];
			arr[j+1] = temp;
		}
	}
}
console.log('冒泡排序算法');
console.log(arr); 

图解:

一篇文章学会常用排序方法_选择排序_02

插入排序
for(var i=1; i<arr.length; i++){
	for(var j=i; j>0; j--){
		if(arr[j]<arr[j-1]){
			var temp = arr[j-1];
			arr[j-1] = arr[j];
			arr[j] = temp;
		}
	}
}
console.log('插入排序算法');
console.log(arr); 
快速排序
function quickSort(arr) {
	//5设置排序结束条件
	if (arr.length <= 1) {
		return arr;
	}

	//1获得数组的中间下标
	var centId = Math.floor(arr.length / 2);
	//2获取数组中间项
	var cent = arr.splice(centId, 1)[0];
	//3中间项作为基准值分割原字符串
	var left = [];
	var right = [];
	for (var i = 0; i < arr.length; i++) {
		if (arr[i] > cent) {
			right.push(arr[i]);
		} else {
			left.push(arr[i]);
		}
	}
	//4拼接 递归调用自己直到全都排序完成
	return quickSort(left).concat(cent, quickSort(right));
}
console.log('快速排序算法');
console.log(quickSort(arr));   

图解

一篇文章学会常用排序方法_排序方法_03

测试结构

一篇文章学会常用排序方法_选择排序_04