在學習了氣泡排序之後,再來學習選擇排序應該就能更好理解這個演算法了。
選擇排序比較直觀,就是從沒有排序的元素中選出最大或最小的元素放到已排序好的元素後面。
選擇排序
1、比較未排序區域的元素,選出最大或最小的元素放到排序區域。
2、一趟比較完成之後,再從剩下未排序的元素開始比較。
3、反覆執行以上步驟,只到排序完成。
演算法
function
selectsort
(nums)
} temp = nums[i]
; nums[i]
= nums[minindex]
; nums[minindex]
= temp;
}return nums;
}
疑惑**
疑惑1:雙迴圈的理解
**1:外層迴圈控制總共需要跑的趟數,n個元素需要n-1趟,和氣泡排序相同,迴圈條件:
for
(let i=
0;i1;i++
)
內層迴圈控制剩下未排序元素的遍歷,已經排過序的不用在排序。每次開始的元素是逐漸往後的,所以內層迴圈的j=i,又因為自己不用和自己比較,j=i+1。
for
(let j=i+
1;j)
疑惑2:交換方式
temp = nums[i]
; nums[i]
= nums[minindex]
; nums[minindex]
= temp;
**2:和氣泡排序不同,這個交換在外層迴圈的時候進行交換,而不是和氣泡排序一樣每次內層迴圈判斷都要交換。
從這個交換方式可以看出,每次交換是迴圈開始的元素與選擇出來最小或最大的元素交換,也就是說每次交換之後都會把選擇出來的元素放到前面排序好元素的後面。
簡要概括
選擇排序的理解更直接,就是選出最小的或最大的元素放到排序元素的後面,然後再從剩下未排序的元素繼續選擇。與氣泡排序有相同之處,也有不同之處,需要好好分析和理解,否則就會搞混淆。
選擇排序的理解
思路 重複 元素個數 1 次 把第乙個沒有排序過的元素設定為最小值 遍歷每個沒有排序過的元素 如果元素 現在的最小值 將此元素設定成為新的最小值將最小值和第乙個沒有排序過的位置交換 package com.zzh import edu.princeton.cs.algs4.stdin import ...
深入理解選擇排序
選擇,選擇,就是先選擇好了,再交換。氣泡排序的思路 給定乙個陣列,每次迴圈以此找到最小的數的下標,最後與相應的下標的值交換。平均時間複雜度 o n 2 最好情況 o n 2 已經排好序 最壞情況 o n 2 倒敘的時候 空間複雜度 o 1 沒有占用額外的空間 穩定性 不穩定 排序前相等的兩個數,排序...
再理解敏捷
2009年1月24日 2008年春,專案做的對敏捷有了點興趣,花了兩個晚上瀏覽了 敏捷迭代開發 管理者指南 理念式的書,看起來比較輕鬆,摘錄一些自己的體會。有些需求在開始的時候是提不出來的,或者說沒法細化的,強行的過渡需求分析是浪費時間的行為,到後來多半還是要改。瀑布 其實royce大大提出的瀑布模...