今天是春節,大年初一,十七在這里給大家拜年了~ ,在新的一年里,祝大家牛年更牛,身體健康,萬事順心,代碼無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年秋招可以簽的滿意作業,感謝大家!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/259486.html
標籤:其他
上一篇:vue02--文本渲染
