1)演算法簡介
選擇排序(selection sort)是一種簡單直觀的排序演算法。它的工作原理如下:
2)演算法描述和分析
n個記錄的檔案的直接選擇排序可經過n-1趟直接選擇排序得到有序結果:
1、初始狀態:無序區為r[1..n],有序區為空。
2、第i趟排序(i=1,2,3...n-1)
第i趟排序開始時,當前有序區和無序區分別為r[1..i-1]和r(i..n)。該趟排序從當前無序區中選出關鍵字最小的記錄 r[k],將它與無序區的第1個記錄r交換,使r[1..i]和r分別變為記錄個數增加1個的新有序區和記錄個數減少1個的新無序區。
3、前n-1趟結束,陣列有序化了
選擇排序的交換操作介於0和(n-1)次之間。選擇排序的比較操作為n(n-1)/2次之間。選擇排序的賦值操作介於0和3(n-1)次之間。比較次數o(n^2),比較次數與關鍵字的初始狀態無關,總的比較次數n=(n-1)+(n-2)+...+1=n*(n-1)/2。 交換次數o(n),最好情況是,已經有序,交換0次;最壞情況是,逆序,交換n-1次。 交換次數比氣泡排序少多了,由於交換所需cpu時間比比較所需的cpu時間多,n值較小時,選擇排序比氣泡排序快。
最差時間複雜度 о(n²)
最優時間複雜度 о(n²)
平均時間複雜度 о(n²)
最差空間複雜度 о(n) total, o(1)
4)演算法**
void selection_sort(int *a, int len)
} }
5)考察點,重點和頻度分析
就博主看過的筆試面試題而言,選擇演算法也大多出現在選擇填空中,要熟悉其時間和空間複雜度,最好最壞的情況分別是什麼,以及在那種情況下,每一輪的比較次數等。
6)筆試面試例題
例題1、在插入和選擇排序中,若初始資料基本正序,則選用插入排序(到尾部);若初始資料基本反序,則選用選擇排序。
例題2、 下述幾種排序方法中,平均查詢長度(asl)最小的是
a. 插入排序b.快速排序c. 歸併排序 d. 選擇排序
演算法之直接選擇排序
選擇排序的基本思想 每次都從待排序的檔案中選擇出排序碼最小的記錄,將該記錄放於已排序檔案的最後乙個位置,直到已排序檔案記錄個數等於初始待排序檔案的記錄個數字置。這種思路導致的結果便是排出來的序列為從大到小 選擇排序主要分 1.直接選擇排序 2.樹形選擇排序 3.堆排序 直接選擇排序是一種簡單的方法,...
排序演算法之直接選擇排序
直接選擇排序是將整個待排序序列分為兩部分,一部分為有序 最開始有序序列為空 一部分為無序 最終無序序列為空 有序序列中的數都不大於無序序列中的數。它的過程是每次都在無序中尋找乙個最小的數,然後將其與無序序列的第乙個數交換,並併入有序序列。則有序序列長度增1,無序序列長度減1。比如 對r 0 n 陣列...
排序演算法之直接選擇排序
直接選擇排序是將整個待排序序列分為兩部分,一部分為有序 最開始有序序列為空 一部分為無序 最終無序序列為空 有序序列中的數都不大於無序序列中的數。它的過程是每次都在無序中尋找乙個最小的數,然後將其與無序序列的第乙個數交換,並併入有序序列。則有序序列長度增1,無序序列長度減1。比如 對r 0 n 陣列...