排序算法之——選擇排序

本文將詳細說明關鍵變量的做用,結合代碼進行梳理python

使用語言:python數組


選擇排序的過程markdown

  1. 數組分爲無序與有序兩個部分
  2. 每次從無序序列中選擇最小(大)的數,與無序序列第一個數進行交換
  3. 重複第二步,直到整個序列都爲有序序列

如下疑問:ui

  1. 誰來界定有序無序的分割位置?spa

    答:外層循環的 i :無序序列的第一個數字的下標code

  2. 誰去找無序序列的最小(大)值?orm

    答:內層循環的 j :遍歷無序序列,對應最小(大)值的下標,所以 j 的遍歷區間也就是 [i+1,len(arr)) (左閉右開)排序

  3. 誰來保存每次找到的最小值的索引?教程

    答:minIndex :若 j 找到了更小(大)的值,會 minIndex=j ,記錄最新的最小(大)值的下標索引


選擇排序的代碼 (代碼是採用的菜鳥教程的示例代碼,是升序排序)

def selectionSort(arr):
    for i in range(len(arr) - 1): 
        # 記錄最小數的索引
        minIndex = i #假設當前最小值的索引就是i,這只是假設的
        for j in range(i + 1, len(arr)): #j去找無序序列的最值
            if arr[j] < arr[minIndex]: #找到了更小的!
                minIndex = j #趕忙將更小值的索引更新給minIndex
        ''' 好啦,如今j已經找完無序序列啦,由於一開始i是假設的最小值的索引,並將這個假設的最小值的索引i賦給了minIndex 因此咱們如今來看看i是否和minIndex還相同(即下面的if過程) 若是相同,就意味着minIndex根本沒有改變,即j沒有找到更小值 若是不相同,就意味着j找到了更小值,並將更小值的索引j賦給了minIndex,minIndex更新了 才致使了minIndex和初始值i不同了,由於找到了更小的值 接下來交換arr[i]和arr[minIndex] (與無序序列的第一個數字交換) if i != minIndex: arr[i], arr[minIndex] = arr[minIndex], arr[i] return arr 複製代碼

排序舉例:

待排序列: 43,65,4,23,6,98,2,65,7,79 
第一趟: 2,65,4,23,6,98,43,65,7,79 
第二趟: 2,4,65,23,6,98,43,65,7,79 
第三趟: 2,4,6,23,65,98,43,65,7,79 
第四趟: 2,4,6,7,43,65,98,65,23,79 
第五趟: 2,4,6,7,23,65,98,65,43,79 
第六趟: 2,4,6,7,23,43,98,65,65,79 
第七趟: 2,4,6,7,23,43,65,98,65,79 
第八趟: 2,4,6,7,23,43,65,65,98,79 
第九趟: 2,4,6,7,23,43,65,65,79,98
結束
複製代碼
相關文章
相關標籤/搜索