分别是冒泡排序,选择排序,插入排序
冒泡排序
算法的思想是将第一个元素与第二个元素作比较,如果第一个比第二个元素大的话,则交换他们的位置,这样一轮下来能将最大的元素排在最后,如此遍历n-1轮
Array.prototype.bubbleSort = function(){
//总共要进行i次排序
for(let i = 1; i<this.length-1; i++){
//这是进行一次排序,每排好一次就会减少一次,所以循环也减去i
for(let j = 1; j<this.length-1-i; j++){
if(this[j]<this[j+1]){
//交换
const temp = this[j]
this[j] = this[j+1]
this[j+1] = temp
}
}
}
}
const arr = [5,4,3,2,1]
arr.bubbleSort()
//[1,2,3,4,5]
时间复杂度:O(n^2),性能不是很好
选择排序
找到数组中的最小值,将他放在第一位,再找出剩余的最小值将它放在第二位,如此循环n-1轮
Array.prototype.selectSort = function(){
//总共进行length -1次排序
for(let i = 0; i<this.length -1; i += 1){
let indexMin = i
for(let j = i; j<this.length; j+=1){
//找出从i开始到最后中最小的值
if(this[j] < this[indexMin]){
indexMin = j
}
}
//把最小值放在最前面
if(indexMin != i){
const temp = this[i]
this[i] = this[indexMin]
this[indexMin] = temp
}
}
}
const arr = [5,4,3,2,1]
arr.selectSort()
时间复杂度:O(n^2)
插入排序
从第二个数开始往前比,如果比第二个数大的话就往后排,以此循环
Array.prototype.insertionSort = function(){
for(let i = 0; i<this.length; i++){
const temp = this[i]
let j = i
// 对j进行一次次循环向前比
while(j > 0){
// 如果前一个比这个大 则交换
if(temp[j-1] > temp){
this[j] = this[j-1]
}else{
break
}
j--
}
// 取到的j就为应该插入的地方,将此处的值改为this[i]
this[j] = temp
}
}
const arr = [5,4,3,2,1]
arr.insertionSort()