基本思想:第i趟在n-i+1(i=1,2,....,n-1)個記錄中選取關鍵碼最小的記錄作為有序序列的第i個記錄。
需要解決的問題?
(1)如何在待排序序列中選出關鍵碼最小的記錄?
(2)如何確定待排序序列中最小的記錄在有序序列中的位置?
簡單選擇排序實質是一種交換排序,從待排序序列中選取最小的記錄與待排序序列中的最後乙個元素進行交換,從而實現乙個自增長序列的排序。
因而簡單選擇排序每進行一次掃瞄,都會選出待排序序列中最小的元素放入有序序列。有序序列中的任何乙個元素都比待排序序列中的元素小。進行到第i次掃瞄時就會得到乙個有i個記錄組成的有序序列。這些記錄在有序序列中的位置不會在後面的排序中發生變化。
因而,簡單選擇排序沒進行一次選擇排序都可以唯一確定乙個記錄在有序序列中的位置。
時間複雜度分析:
乙個有n個記錄組成的序列,需要進行n-1次掃瞄,第一次掃瞄(n-1)個記錄,第二次(n-2)個記錄……
因而時間複雜度為:n(n-1)/2 時間複雜度為o(n×n)級
空間複雜度:
需要乙個臨時空間儲存 空間複雜度為:o(1);
具體實現**如下:
#include using namespace std;
void selectsort(int r, int n)
}if(index != i)//如果無序序列中第乙個記錄不是最小值,則進行交換
}}int main()
; int n = sizeof(r)/sizeof(r[0]);
selectsort(r, n);
for(int i=1; i
簡單選擇排序 簡單選擇排序詳解
n個記錄的檔案的直接選擇排序可經過n 1趟直接選擇排序得到有序結果 初始狀態 無序區為r 1.n 有序區為空。第1趟排序 在無序區r 1.n 中選出關鍵字最小的記錄r k 將它與無序區的第1個記錄r 1 交換,使r 1.1 和r 2.n 分別變為記錄個數增加1個的新有序區和記錄個數減少1個的新無序區...
選擇排序 簡單選擇排序
在要排序的一組數中,選出最小 或者最大 的乙個數與第1個位置的數交換 然後在剩下的數當中再找最小 或者最大 的與第2個位置的數交換,依次類推,直到第n 1個元素 倒數第二個數 和第n個元素 最後乙個數 比較為止。第一趟,從n個記錄中找出關鍵碼最小的記錄與第乙個記錄交換 第二趟,從第二個記錄開始的n ...
選擇排序 簡單選擇排序
1.選擇排序 簡單選擇排序,堆排序 與交換排序 氣泡排序,快速排序 的區別 每次比較如果發現較小的元素在後面,就交換兩個相鄰的元素。而選擇排序演算法的改進在於 先並不急於調換位置,先從a 1 開始逐個檢查,看哪個數最小就記下該數所在的位置p,等一躺掃瞄完畢,再把a p 和a 1 對調,這時a 1 到...