国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

數(shù)據(jù)結(jié)構(gòu)算法練習(xí) 插入排序 冒泡排序

這篇具有很好參考價(jià)值的文章主要介紹了數(shù)據(jù)結(jié)構(gòu)算法練習(xí) 插入排序 冒泡排序。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

插入排序

代碼如下?

package main

import "fmt"

func main() {

? ? a := []int{4, 5, 6, 1, 3, 2}? ??

? ? b := insert(a)

? ? for i := 0; i < len(b); i++ {

? ? ? ? fmt.Println(b[i])

? ? }

}文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-476487.html

func insert(a []int) []int {

? ? if len(a) <= 1 {? ? ? ? ? ? ? ? ? ?如果數(shù)組長(zhǎng)度小于等于1 不用排序直接返回?

? ? ? ? return a

? ? }

? ? for i := 1; i < len(a); i++ {? ? 遍歷數(shù)組,確定要重新插入的元素,從第2個(gè)元素開(kāi)始,一直到最后一個(gè)元素?

? ? ? ? value := a[i]? ? ? ? ? ? 記錄要插入元素的值?

? ? ? ? j := i - 1? ? ? ? ? ? ? ? ? ? 而j表示的是插入位置,插入位置從i的前一個(gè)位置開(kāi)始?

? ? ? ? for ; j >= 0; j-- {? ? ? 遍歷j尋找插入位置

? ? ? ? ? ? if a[j] > value {? 如果當(dāng)前j位置的元素大于記錄的元素,說(shuō)明該位置不是要插入的位置,需要將j往前移動(dòng),但在移動(dòng)j之前,需要將a[j]的值向后移動(dòng),以騰出插入位置

? ? ? ? ? ? ? ? a[j+1] = a[j]

? ? ? ? ? ? } else {? ? ? ? ?如果當(dāng)前j的值小于valuel,說(shuō)明j+1這個(gè)位置就是該元素的插入位置 ,找到插入位置中斷循環(huán)?

? ? ? ? ? ? ? ? break

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? a[j+1] = value

? ? }

? ? return a

}

冒泡排序

代碼如下

package main

import "fmt"

func main() {

? ? a := []int{8, 2, 3, 1, 9, 6}

? ? b := bubble(a)

? ? for i := 0; i < len(b); i++ {

? ? ? ? fmt.Println(b[i])

? ? }

}

func bubble(a []int) []int {

? ? if len(a) <= 1 {

? ? ? ? return a

? ? }

? ? for i := 0; i < len(a); i++ {? ? ? i表示已經(jīng)排序好元素的個(gè)數(shù)?

? ? ? ? flag := false? ? ? ? ? ? ? 設(shè)置一個(gè)標(biāo)志位,來(lái)記錄每一輪排序是否有元素交換?

? ? ? ? for j := 0; j < len(a)-i-1; j++ {? ? ? j表示需要進(jìn)行排序的元素,從第一個(gè)元素,到len(a)-i-1,當(dāng)每排完一輪,需要排序的元素的最終下標(biāo)就會(huì)往前移動(dòng)?

? ? ? ? ? ? if a[j] > a[j+1] {? ? ? ? ? ? 比較前后兩個(gè)元素的大小,如果前面的元素大于后面的元素則進(jìn)行交換?

? ? ? ? ? ? ? ? a[j], a[j+1] = a[j+1], a[j]

? ? ? ? ? ? ? ? flag = true? ? ? ? ? ? ?如果發(fā)生交換,則把標(biāo)志位置為true?

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? if !flag {? ? 如果這一輪沒(méi)有發(fā)生交換,則說(shuō)明已經(jīng)排好序了,就可以進(jìn)行break了?

? ? ? ? ? ? break

? ? ? ? }

? ? }

? ? return a

}

選擇排序

代碼如下

package main

import "fmt"

func main() {

? ? a := []int{8, 2, 3, 1, 9, 6}

? ? b := xuanze(a)

? ? for i := 0; i < len(b); i++ {

? ? ? ? fmt.Println(b[i])

? ? }

}

func xuanze(a []int) []int {

? ? if len(a) <= 1 {

? ? ? ? return a

? ? }

? ? for i := 0; i < len(a)-1; i++ {? ?i表示前i個(gè)元素已經(jīng)排序好了,如i=2 ,則說(shuō)明有兩個(gè)元素已經(jīng)排序好了,那么此時(shí)未排序的下標(biāo)則為i?

? ? ? ? minindex := i? ?取未排序的開(kāi)始下標(biāo)作為最小下標(biāo)的初始值?

? ? ? ? for j := i + 1; j < len(a); j++ {? ?j取未排序開(kāi)始下標(biāo)的后一個(gè),避免重復(fù)?

? ? ? ? ? ? if a[minindex] > a[j] {? ? ? ? 遍歷未排序的數(shù)組部分,找到最小值,并將這個(gè)值所對(duì)應(yīng)的下標(biāo)定義為最小下標(biāo)

? ? ? ? ? ? ? ? minindex = j??

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? a[i], a[minindex] = a[minindex], a[i]? ?交換最小下標(biāo)和未排序的開(kāi)始下標(biāo)。注 :i作為下標(biāo)表示未開(kāi)始排序的數(shù)組的第一個(gè)元素,也是排序完成部分的后一個(gè)元素 ,這樣交換,確保將未排序的最小值放在了排序完成元素的后一個(gè)位置?

? ? }

? ? return a

}

到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)算法練習(xí) 插入排序 冒泡排序的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包