冒泡排序,选择排序,快速排序
冒泡排序:
核心:两个for循环嵌套,每一轮都会比上一轮少循环一次,每次循>环都拿第一个位置和后面那个位置的值相比,如果前面的大,就交换两个值
function bubble(arr){
for(var i=1; i<arr.length; i++){
//每一轮排序下来都可以确定最后是最大的,所以每进行一轮都可以少循环一次
for(var j=0; j<arr.length-i; j++){
if(arr[j]>arr[j+1]){
var temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
return arr;
}
var arr=[1,99,3,44,5,6]
console.log(bubble(arr));
选择排序
function select(arr1){
//每一轮过后都能确定最前面那个是最小值,所以下一轮拿下一个值来对比
for(var i=0; i<arr1.length; i++){
var min=i; //每一轮都拿上一轮的第一个后的一个来当做最小的和后面的比较
for(var j=i+1; j<arr1.length; j++){
if(arr1[j]<arr1[min]){
min=j;
}
}
//判断当前最小下标是否为开始的默认值,若不是则交换位置,把最小的值换到最前面
if(min!=i){//每一轮都要判断一次 !!!!
var temp=arr1[min];
arr1[min]=arr1[i];
arr1[i]=temp;
}
}
return arr1
}
var arr1=[1,8,44,3,7];
console.log(select(arr1));
快速排序(利用递归)
function quick(arr2) {
if (arr2.length <= 1) {
return arr2;
}
//定义左边数组、右边数组和基数
var left = [], right = [], mid = arr2[0];
for (var i = 1; i < arr2.length; i++) {
//判断数组中的数是大于基数还是小于基数,大于的再left数组,小于的在right数组
arr2[i] < mid ? left.push(arr2[i]) : right.push(arr2[i]);
}
return quick(left).concat([mid], quick(right));//mid是数值,只有数组才能连接
}
var arr2=[2,6,77,3,4,9]
console.log(quick(arr2));