冒泡、选择、计数 排序
BubbleSort
双层for循环,一层减一次。
里层减外层,变量相交换。
var arr = new Array(45, 65, 12, 48, 23, 18, 89)
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]) {
var temp = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = temp
}
}
}
console.log(arr)
SelectionSort
假设第一个最小,用第一个和后边的全部比较确认一遍,如果有更小的就置换一下。然后第一个就成为真正的最小的,再假设第二个是最小的和后边的比较,重复之前的流程。
var arr = new Array(12,56,48,32,14)
for(var i = 0 ; i < arr.length - 1;i++){
var minIndex = i
for(var j = i+1 ; j < arr.length ; j++){
if(arr[minIndex] > arr[j]){
minIndex = j
}
}
var temp = arr[i]
arr[i] = arr[minIndex]
arr[minIndex] = temp
}
console.log(arr)
详细注释版:
CountSort
把一个数组arr里面的所有元素的值,作为临时数组tempArr的下标赋进去,然后计数是否有重复的,有重复就++。 再往后,arr.length设置为0,循环一遍tempArr,判断是否有值,无值就continue,有值 值为1 赋一遍值,值为几赋几遍,说明有几个重复元素,就一个个的往后新的arr里面赋值
var arr = [14,3,89,45,14,36,47,1]
var tempArr = []
for(var i =0 ; i <arr.length ; i++){
if(tempArr[arr[i]]!==undefined){
tempArr[arr[i]]++
}else{
tempArr[arr[i]]=1
}
}
arr.length = 0
for(var j = 0 ; j<tempArr.length ; j++){
if(tempArr[j]===undefined)continue
for(var k = 0 ; k < tempArr[j] ;k++){
arr[arr.length]=j
}
}
console.log(arr)