摘要:描述選擇最小的元素由左到右依次交換順序即完成元素由小到大的排序。選擇排序重點(diǎn)在于選擇最小元素。選擇排序每次循環(huán)都能排好一個(gè)元素,因此需要交換的次數(shù)等于元素個(gè)數(shù)。
描述
選擇最小的元素由左到右依次交換順序即完成元素由小到大的排序。選擇排序重點(diǎn)在于選擇最小元素。以下是較為詳細(xì)的描述:
首先,把所有的數(shù)據(jù)循環(huán)一遍找到最小的數(shù),然后和第一個(gè)數(shù)交換位置。
然后從第二個(gè)數(shù)起,一直循環(huán)到最后一個(gè),找到最小的數(shù)和第二個(gè)交換。
如此一直找到最后一個(gè)。
選擇排序每次循環(huán)都能排好一個(gè)元素,因此需要交換的次數(shù)等于元素個(gè)數(shù)。選擇排序是最容易理解的排序方式,通俗的理解方式就是:在9個(gè)碗里放了9個(gè)蘋(píng)果,逐個(gè)看一眼找出最小的蘋(píng)果和第一個(gè)碗里的交換一下,然后不再看第一個(gè)碗,從第二個(gè)碗起,再玩一次,直到所有的碗都玩過(guò)。
代碼function selectionSort($needSortData) { $sortDataLength = count($needSortData); //計(jì)算出待排序元素?cái)?shù)量 for ($i = 0; $i < $sortDataLength; $i++) //外層遍歷每一個(gè)待排序元素 { $min = $i; //外層遍歷把當(dāng)前元素設(shè)置為最小值 for ($j = $i + 1; $j < $sortDataLength; $j++) {//然后從下一個(gè)元素開(kāi)始依次和正在遍歷的元素比較,此層遍歷記為內(nèi)層遍歷 if ($needSortData[$j] < $needSortData[$min]) { //遍歷到比此次最小值還小的元素,那么用$min記錄以下當(dāng)前位置 //然后繼續(xù)遍歷,直到遍歷到最后,也就是說(shuō)$min會(huì)記錄最小值的位置 $min = $j; } } //以下三行是把找到的最小值和正在外層遍歷的當(dāng)前元素交換 $temp = $needSortData[$i]; $needSortData[$i] = $needSortData[$min]; $needSortData[$min] = $temp; } return $needSortData; } $unSortedData = [9, 1, 3, 8, 2, 6, 5, 7, 4]; $result=selectionSort($unSortedData); print_r($result);
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/29072.html
摘要:數(shù)據(jù)結(jié)構(gòu)常見(jiàn)數(shù)據(jù)結(jié)構(gòu)數(shù)組是最簡(jiǎn)單而且應(yīng)用最廣泛的數(shù)據(jù)結(jié)構(gòu)特征使用連續(xù)內(nèi)存空間來(lái)存儲(chǔ)存放相同類(lèi)型或著衍生類(lèi)型的元素?cái)?shù)組比較特別,可以存放八種數(shù)據(jù)類(lèi)型通過(guò)下標(biāo)來(lái)訪問(wèn)集合特征保存不重復(fù)的元素字典特征就是關(guān)聯(lián)數(shù)組,以形式存儲(chǔ)棧,與隊(duì)列相似特征存儲(chǔ)數(shù) 數(shù)據(jù)結(jié)構(gòu) 常見(jiàn)數(shù)據(jù)結(jié)構(gòu) Array 數(shù)組是 最簡(jiǎn)單 而且 應(yīng)用最廣泛 的數(shù)據(jù)結(jié)構(gòu) 特征: 1、使用連續(xù)內(nèi)存空間來(lái)存儲(chǔ) 2、存放相同類(lèi)型或著衍生類(lèi)型...
摘要:而在證明算法是正確的基礎(chǔ)上,第二步就是分析算法的時(shí)間復(fù)雜度。算法的時(shí)間復(fù)雜度反映了程序執(zhí)行時(shí)間隨輸入規(guī)模增長(zhǎng)而增長(zhǎng)的量級(jí),在很大程度上能很好反映出算法的優(yōu)劣與否。 showImg(https://segmentfault.com/img/remote/1460000016451712?w=800&h=341); 前言 雖然工作中,你覺(jué)得自己并沒(méi)有涉及到算法這方面的東西,但是算法是程序的...
摘要:插入排序是穩(wěn)定的算法。所以準(zhǔn)確的說(shuō),當(dāng)數(shù)組長(zhǎng)度大于的時(shí)候,采用了快速排序和插入排序的混合排序方法。在對(duì)數(shù)組進(jìn)行了一次快速排序后,然后對(duì)兩個(gè)子集分別進(jìn)行了插入排序,最終修改數(shù)組為正確排序后的數(shù)組。 JavaScript 專(zhuān)題系列第二十篇,也是最后一篇,解讀 v8 排序源碼 前言 v8 是 Chrome 的 JavaScript 引擎,其中關(guān)于數(shù)組的排序完全采用了 JavaScript 實(shí)...
摘要:二選擇排序原理在一列數(shù)字中,選出最小數(shù)與第一個(gè)位置的數(shù)交換。至此確定了前兩個(gè)位置上的數(shù)。示例代碼選擇排序?qū)崿F(xiàn)思路雙重循環(huán)完成,外層控制輪數(shù),當(dāng)前的最小值。 二、選擇排序 原理: 在一列數(shù)字中,選出最小數(shù)與第一個(gè)位置的數(shù)交換。然后在剩下的數(shù)當(dāng)中再找最小的與第二個(gè)位置的數(shù)交換,如此循環(huán)到倒數(shù)第二個(gè)數(shù)和最后一個(gè)數(shù)比較為止。(以下都是升序排列,即從小到大排列) 舉例說(shuō)明: $arr =...
摘要:排序嚴(yán)格來(lái)說(shuō)不算數(shù)據(jù)結(jié)構(gòu),更應(yīng)該歸于算法一類(lèi),因?yàn)閿?shù)據(jù)結(jié)構(gòu)指的是數(shù)據(jù)與數(shù)據(jù)之間的關(guān)系,排序參與其中,更多的是讓數(shù)據(jù)狀態(tài)發(fā)生了改變。 排序嚴(yán)格來(lái)說(shuō)不算數(shù)據(jù)結(jié)構(gòu),更應(yīng)該歸于算法一類(lèi),因?yàn)閿?shù)據(jù)結(jié)構(gòu)指的是數(shù)據(jù)與數(shù)據(jù)之間的關(guān)系,排序參與其中,更多的是讓數(shù)據(jù)狀態(tài)發(fā)生了改變。于是,我們開(kāi)始用PHP來(lái)聊聊算法。 引子 其實(shí)有一句話說(shuō)的是不錯(cuò)的,不必重復(fù)造輪子,所以下面我將引用別人的文章作為本文的引文,...
閱讀 3431·2019-08-29 16:17
閱讀 2041·2019-08-29 15:31
閱讀 2731·2019-08-29 14:09
閱讀 2629·2019-08-26 13:52
閱讀 817·2019-08-26 12:21
閱讀 2209·2019-08-26 12:08
閱讀 1097·2019-08-23 17:08
閱讀 2101·2019-08-23 16:59