今天是春节,大年初一,十七在这里给大家拜年了~ ,在新的一年里,祝大家牛年更牛,身体健康,万事顺心,代码无bug,为我国的互联网事业一起冲冲冲!!!
今天咱们主要来讨论三种排序算法,分别是冒泡排序、选择排序、快速排序。
首先来说说冒泡排序,冒泡排序顾名思义,就是大的泡泡往上冒,在排序中首先将大的数据排好,然后在依次排小的数据。
如图所示:
说明:图中最后一排文字错误,应是:依次对比
这个是冒泡排序的基本思路,代码也很简单,代码所示:
function arrChange(arr,a,b){
let temp = arr[a]
arr[a] = arr[b]
arr[b] = temp
}
function bubbleSort(arr){
for(let i = 0; i < arr.length; i++){
for(let j = 0; j < arr.length - i - 1; j++){
if(arr[j] > arr[j + 1]){
arrChange(arr, j ,j + 1) //对比,如果前者比后者大,则交换位置
}
}
}
}
let arr = [12,1,65,11,12,12,3,9,515,45]
bubbleSort(arr)
console.log(arr) //[1, 3, 9, 11, 12, 12, 12, 45, 65, 515]
排序呢代码实现不难,主要是注重思路,冒泡排序的重点思路是:依次对比相邻的两个数字,前者大则互换位置,这样每次循环就可以把最大的数字放在最后面,这样的话重复循环就可以使数组从小到大进行排序。
然后咱们再来说说选择排序,有了之前的冒泡排序经验,选择排序就简单的多了,这里就不给大家上图了。选择排序就是每次选择出一个最大/最小的数字,然后将其与最后/最前的数字进行互换,这样依次进行循环,直到把所有数字都安排完毕。和冒泡排序思路极其相似,就是选择的方式不同,冒泡排序是相邻两个对比,选择排序是依次对比选出最小的,如代码所示:
function chooseSort(arr){
for(let i = 0; i < arr.length; i++){
let index = i;
for(let j = i; j < arr.length; j++){
if(arr[j] < arr[index]) {
index = j
console.log(arr[index])
}
}
arrChange(arr,i,index)
}
}
let arr = [12,1,65,11,12,12,3,9,515,45]
bubbleSort(arr)
console.log(arr) //[1, 3, 9, 11, 12, 12, 12, 45, 65, 515]
下来就到了我们的重点:快速排序,快速排序的思路是:选取一个数字作为中间值,比这个值小的往左边,比这个数字大的往右边,然后左边和右边再进行同样的操作,直到排序完成。
这里实现的方式是通过左右两边坐标对比的方式进行替换,即左边的遇见比中间值小的移动到下一个,遇见比中间值大的,则停下,右边同理。
用代码实现请看:
function quickSort(arr,begin,end){
if(begin >= end) return
let left = begin;
let right = end;
let temp = arr[begin]
while(left < right){
do{
left ++
}while(left < right && arr[left] < temp)
while(left < right && arr[right] > temp){
right --
}
if(left < right){
arrChange(arr,left,right)
}
}
let mid = arr[left] > temp? left - 1 :left
arrChange(arr,begin,mid)
quickSort(arr,begin,mid - 1)
quickSort(arr,mid+1,end )
}
let arr = [12,1,65,11,12,12,3,9,515,45]
quickSort(arr,0,arr.length - 1)
console.log(arr) //[1, 3, 9, 11, 12, 12, 12, 45, 65, 515]
这就是具体的实现代码,排序呢主要是思路,实现代码的方式各不相同,大家如果有好的方式也可以评论哦!
今天是春节,大年初一,再一次祝大家在牛年万事如意,程序路上一帆风顺,也希望自己在今年2021年秋招可以签的满意工作,感谢大家!