選擇排序法

2021-06-16 08:21:53 字數 1123 閱讀 3297

1. 直接選擇排序法

基本思想:每一趟(第i趟, i  = 0, 1, 2, ......n-1)在後面n-i個待排序記錄中選出關鍵字最小的記錄,作為有序記錄序列的第i個記錄。直到第n-2趟完,待排記錄只剩下乙個,不完再選了!

//直接選擇排序法

void selectionsort(int * parry, int ilen)

} if ( k != i) //如果關鍵字最小的記錄的索引值不等於子串行第乙個記錄的索引}}

直接排序演算法的時間複雜度為o(n ^2), 且是一種不穩定的排序方法!記錄的移動次數與元素序列的初始排列有關。

2. 堆排序

堆的定義:n個元素的序列k1,k2,k3,......kn當且僅當滿足下關係時,稱之為堆。

若將序列對應的一維陣列看成是乙個完全二叉樹,則堆 的含義表明,完全二叉樹所有非終端結點的均值不大於(或不小於)其左、右孩子的結點的值。由此,若序列k1,k2.....kn是堆,則堆頂元素(完全二叉樹的根)必為序列中n個元素的最小值(或最大值)。

若在輸出堆頂的最小值之後,使得剩餘n-1個元素的序列重建成乙個堆,則得到的n個元素的次小值。如此反覆執行,便能得到乙個有序序列,這個過程稱之為堆排序。堆排序的需解決的核心問題是:1)如何由初始無序序列構建堆,2)在輸出堆頂元素之後怎麼調整使剩下的元素構成新的堆。

//建立最大堆

void heapadjust(int * parry, int start, int len)

if (temp >= parry[j]) //temp的排序碼大則不做調整,否則孩子中的較大者上移

else

}parry[i] = temp; //temp中暫存元素放到合適的位置

}void heapsort(int * parry, int len)

for (i = len; i >= 0; i--) //對錶進行排序

}

堆排序演算法對記錄數較少的檔案並不提倡,但對n較大的檔案還是很有效的,因為其執行時間主要消耗在建初始堆和調整建立新堆的反覆篩選上。堆排序的時間複雜度為o(nlog2(n)), 且是不穩定的排序演算法。

排序法之選擇排序法

首先通過陣列中元素的比較方式來分析 用陣列中第乙個角標的元素與陣列中第二個角標的元素進行比較,發現9比6大,進行位置置換,此處應該定義乙個三方變數,用來記錄住置換過程的元素值,然後再用第乙個角標的元素與下乙個角標元素進行比較,按照全面的原則進行置換位置,如果前者小於後者,則不置換位置,一次比較,當第...

氣泡排序法 選擇排序法

相鄰兩個數進行比較 如果前者比後者大 就把前者和後者互換 比如十個數 經過九次比較 就可以得到乙個最大的數字於排列的最末端 再經過八次比較 可以得到乙個第二大的數 依次類推 即最大的數一次一次冒泡上來。include int main printf n 資料排序 for i 0 i 9 i 列印資料...

選擇排序法

選擇排序 selection sort 是一種簡單直觀的排序演算法。它的工作原理是每一次從待排序的 資料元素 中選出最小 或最大 的乙個元素,存放在序列的起始位置,直到全部待排序的資料元素排完。include using namespace std int main inti,j,k,temp,n,...