千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構(gòu)

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > 可視化選擇排序算法

可視化選擇排序算法

來源:千鋒教育
發(fā)布人:syq
時間: 2022-09-22 16:03:00 1663833780

  選擇排序

  讓我們以最簡單的排序算法之一為例:找到數(shù)組中最小的元素并將其與第一個位置的元素交換,然后找到下一個最小的元素并將其與第二個位置的元素交換,然后繼續(xù)直到數(shù)組被排序。此方法稱為選擇排序。在每個外部循環(huán)之后繪制將得到以下輸出:

32

  以下是我們可以快速編寫的程序:

33

  該算法編寫起來不太困難,并且此實現(xiàn)的效率為 。在每個外部循環(huán)的末尾添加 A 以生成我們的輸出。O(n^2)console.log

  如何為字母添加動畫效果?

  現(xiàn)在讓我們假設我們想要對它進行動畫處理。例如,每次我們交換兩個元素時,我們都可以期望看到兩個元素相互移動并最終在新位置安頓下來的平穩(wěn)過渡。

34

  讓我們使用 HTML/CSS 來實現(xiàn)這一點。假設我們在數(shù)組中有 14 個字母:

35

  要將字母移動到不同的位置,我們可以將其位置設置為 從 到 假設每個字母都占據(jù) 。為了使動畫有點流暢,我們可以添加 ,以允許動畫花費1秒,并具有一些輕松的感覺。S absolute 32px 320px 32px transition

  我們制作什么動畫?

  好的,HTML和CSS是確保字母在屏幕上移動的基本要素。但是我們需要一種方法來創(chuàng)建與動畫幀關聯(lián)的狀態(tài)。然后,我們可以在新位置顯示字母,以防狀態(tài)發(fā)生變化。

  考慮保存陣列內(nèi)容:initialArr

36

  我們想問以下問題。如果我們跟蹤第一個字母,它將移動到什么位置?同樣,如果仔細觀察第二封信,它會移動到什么位置?從本質(zhì)上講,我們希望跟蹤每個字母的位置。聽起來很直觀,當你在研究算法時,這可能是一個非常不同的體驗,你可以跟蹤其他任何東西,大多數(shù)時候是派生的屬性。as

  假設我們使用數(shù)組來跟蹤每個字母的位置。例如,最初,第一個字母的位置是 ,第二個字母的位置是 。但是經(jīng)過幾次移動后,第二個字母可以移動到位置 。假設我們知道當前運行的數(shù)組,我們可以使用以下 React 代碼顯示每個字母:index 0 1 10 index

37

  我們從14個字母開始,以14個字母結(jié)束,因為它們是唯一的對象(盡管它們可以有重復的符號)。因此,我們無意更改對象列表;相反,我們只想計算出它們的當前位置,然后將其乘以32,如 .left: v * 32

  如何生成倉位?

  好的,現(xiàn)在給定一個位置列表,我們可以在屏幕上顯示它們。但是,誰來給我們每幀的所有位置呢?當然,這是我們試圖研究的算法。讓我們在 JavaScript 生成器函數(shù)的幫助下創(chuàng)建一個:

38

  我相信你可以從上面的代碼中看到我們的算法。有兩個循環(huán),每個內(nèi)部循環(huán)后都有一個交換。它比算法本身稍微復雜一點,但總的來說,它是一個直接的翻譯。開銷是我們希望跟蹤每個字母在 中的位置,而不是最終排序的數(shù)組 。indexarr

  最重要的一行是 ,我們在其中暫停算法并輸出 。這就是我們獲取當前狀態(tài)的方式。為了將所有內(nèi)容放在一起,我們得到了以下組件:yield { index }index App

39

  從本質(zhì)上講,我們設置了一次性操作,以便在加載后運行動畫循環(huán),然后首先組裝生成器 。之后,對于每一秒,我們調(diào)用以獲取下一個位置列表。React 將確保每次更新都會觸發(fā)屏幕的渲染,以使所有字母保持最新狀態(tài)。useEffectAppg=gen(initialArr)1000msg.next()setIndex(index)

  想要制作更多動畫效果?

  從這一刻起,只需考慮要制作更多元素的動畫即可。例如,在交換之前有一個時刻,我們想首先從變量跟蹤的中識別出我們正在比較的字母。i

  在這種情況下,我們需要修改生成器函數(shù):

40

  我們可以再添加一行輸出,誰說我們只能生成一種類型的項目,誰說我們只能生成相同類型的數(shù)據(jù)。在這里,我們可以通過以下方式跟蹤字母的位置。我們還將此操作命名為 。所有這些都可以根據(jù)您自己的目的進行修改。當我們開始使用這個生成器時,我們可以用新的數(shù)據(jù)集做更多的事情:ii loop

41

  將創(chuàng)建新的狀態(tài)變量來跟蹤位置。如果它與任何字母匹配,它會附加一個CSS類,因此您可以以不同的方式顯示它。outterId ii highlight

tags:
聲明:本站稿件版權均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強師集結(jié),手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內(nèi)將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
久久亚洲中文字幕精品一区四,亚洲日本另类欧美一区二区,久久久久久久这里只有免费费精品,高清国产激情视频在线观看
日本精品在线一区欧美 | 一区二区欧美日韩动漫精品 | 中文字幕乱码亚洲精品 | 亚洲成成熟女人专区 | 亚洲情a成黄在线观看动漫尤物 | 在线精品国精品国产3d |