<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                >[success] # 選擇排序法 [不錯的文章先讀一下](https://juejin.im/post/6844904167778041869#heading-0) ~~~ 1..選擇排序大致的思路是找到數據結構中的最小值并 將其放置在第一位,接著找到第二小的值并將其放在第二位 2.可以理解成'選擇排序'將整個排序分成兩個區間,分別是'排序區間'和'未排序區間',選擇排序每次會從'未排序區間'中找到 最小的元素,將其放到已排序區間的末尾。 3.對引用圖進行說明一下,引用第一個圖中的第二組數據說明 '1 5 6 3 2 4',現在的1就是排序區間,'5 6 3 2 4' 就是為排序區間,這里要說圖雖然是 5 和 2 直接交換,但實際末尾的'4' 也是比較過了,只是圖上的效果感覺4沒有參與本次運算 ~~~ ![](https://box.kancloud.cn/44be35da53ae9ee564ce444542a43d10_811x248.gif) * 這里引用一下王爭老師的圖 ![](https://img.kancloud.cn/b5/db/b5db03a526081955ca586f004bef05d4_1142x856.png) * js 算法結構的圖 ![](https://img.kancloud.cn/6b/73/6b737a79439ad7c8c4cbeda45d3e21e3_409x246.png) >[info] ## 代碼實現 * 工具方法 ~~~ // 生成隨機數數組 function randomArray(max, min, len) { let randomNum = 0 const array = [] for (let i = 0; i < len; i++) { randomNum = Math.floor((Math.random() * (max - min + 1)) + min) array.push(randomNum) } return array } const array = randomArray(1, 10, 5) const Compare = { LESS_THAN: -1, BIGGER_THAN: 1, EQUALS: 0 }; function defaultCompare(a, b) { if (a === b) { return Compare.EQUALS; } return a < b ? Compare.LESS_THAN : Compare.BIGGER_THAN; } // 交換數組中的位置 function swap(array, a, b) { /* const temp = array[a]; array[a] = array[b]; array[b] = temp; */ [array[a], array[b]] = [array[b], array[a]]; } ~~~ >[danger] ##### 等價替換 ~~~ 1.想寫出選擇排序,給先知道一個思維邏輯'等價替換',現在有個小的需求,不用Math 方法,只是通過數組循環 來求出數組中最小值。 2.這類的思路就是,默認'某個值為最小值,但實際這個值可能真的就是最小值,也可能不是',我們用這個值依次去和其他 值比較,然后如果有比這個值還要小的值 ,那這個值就成為我們默認最小值。 ~~~ ~~~ // 等價替換法 function getArraryMin(array, compareFn = defaultCompare) { const { length } = array let min = array[0] for (let i = 1; i < length; i++) { // 默認 0 是最小的 if (compareFn(min, array[i]) === Compare.BIGGER_THAN) { min = array[i] } } return min } console.log(array) console.log(Math.min(...array)) console.log(getArraryMin(array)) ~~~ >[danger] ##### 代碼實現 ~~~ 1.這里有個思維轉換,當我們求一個數組中最小值和最大值的時候,我們用等價替換的方法,只是 循環了一次, 問題來了當我們要把數組中所有的都進行排序那單單的一次循環肯定不夠的,這時候就是雙層for 循環 2.這里還要注意的是'選擇排序'的概念,我們其實會將整個數組分成兩個區域,'排序區間'和'未排序區間',其中'排序區間' 是在數組前半部分,因此已經排序過的地方肯定是不需要在進行排序因此第二層的循環條件也變成了'let j = i; j < length; j++' ~~~ ~~~ // 選擇排序 function selectionSort(array, compareFn = defaultCompare) { const { length } = array let indexMin for (let i = 0; i < length-1; i++) { // 等價替換 indexMin = i for (let j = i; j < length; j++) { if (compareFn(array[indexMin], array[j]) === Compare.BIGGER_THAN) { indexMin = j } } if (i !== indexMin) { swap(array, i, indexMin) } } return array } console.log(selectionSort(array)) ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看