祝大家春节快乐,牛年都是大牛!节日闲暇学习了一下排序算法(JavaScript),来写写收获~~~

今天是春节,大年初一,十七在这里给大家拜年了~ ,在新的一年里,祝大家牛年更牛,身体健康,万事顺心,代码无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年秋招可以签的满意工作,感谢大家!

猜你喜欢

转载自blog.csdn.net/zjk325698/article/details/113795644