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

手機(jī)站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時隨地免費(fèi)學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機(jī)站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時隨地免費(fèi)學(xué)習(xí)課程

當(dāng)前位置:首頁  >  技術(shù)干貨  > 可視化選擇排序算法

可視化選擇排序算法

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

  選擇排序

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

32

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

33

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

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

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

34

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

35

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

  我們制作什么動畫?

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

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

36

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

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

37

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

  如何生成倉位?

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

38

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

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

39

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

  想要制作更多動畫效果?

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

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

40

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

41

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

tags:
聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
請您保持通訊暢通,專屬學(xué)習(xí)老師24小時內(nèi)將與您1V1溝通
免費(fèi)領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
深度學(xué)習(xí)模型權(quán)重h5、weights、ckpt、pth有什么區(qū)別?

1.來源框架不同h5格式通常用于Keras和TensorFlow框架,weights用于Darknet框架,ckpt是TensorFlow框架的一種格式,而pth則主要用于PyTorch框架...詳情>>

2023-10-15 00:05:17
大數(shù)據(jù)測試工程師需要具備哪些技能?

一、理解大數(shù)據(jù)概念大數(shù)據(jù)測試工程師需要理解大數(shù)據(jù)的基本概念和原理,如分布式存儲、MapReduce、實(shí)時計算等。他們還需要了解如何處理大規(guī)模的...詳情>>

2023-10-14 23:43:03
為什么SpringBoot的 jar 可以直接運(yùn)行?

一、JAR文件的結(jié)構(gòu)與執(zhí)行方式Spring Boot的JAR包是Java Archive的縮寫,它是一種壓縮文件格式,可以將Java項目的類文件、資源文件以及依賴庫等...詳情>>

2023-10-14 23:01:49
站群服務(wù)器是什么?

站群服務(wù)器的含義與用途站群服務(wù)器主要用于支持站群,即由一組相互鏈接的網(wǎng)站組成的群體。這些網(wǎng)站通常由同一組織或個人擁有,并且經(jīng)常會互相鏈...詳情>>

2023-10-14 22:46:12
自編碼器是什么?

一、自編碼器原理自編碼器的設(shè)計靈感源于神經(jīng)科學(xué)中關(guān)于感知系統(tǒng)的認(rèn)知原理,它的核心思想是將輸入數(shù)據(jù)經(jīng)過編碼過程,形成一個隱藏層的特征表示...詳情>>

2023-10-14 22:41:10
快速通道
久久亚洲中文字幕精品一区四,亚洲日本另类欧美一区二区,久久久久久久这里只有免费费精品,高清国产激情视频在线观看
在线观看片a免费不卡观看 欧美人与动甡交欧美精品 日韩一级精品亚洲一区二区精品 | 婷婷视频在线播放免费观看 | 日本精品视频一区二区三区 | 伊人久久大香线蕉AV五月天宝贝 | 天天天天香蕉线视频国产 | 中文字幕制服丝袜在线观看 |