內部排序演算法 選擇排序

2021-06-19 03:19:53 字數 2022 閱讀 8865

選擇排序法可使用兩種方式排序:從小到大或從大到小;例如:當n個資料需要由大至小排序時,首先將第乙個位置的資料依次和第2、3、4……、n個位置的資料進行比較。如果資料大於或等於其中乙個位置,則不變;若小於其中乙個位置的資料,則兩個位置的資料互換。互換後第1個位置的資料繼續與後續位置的資料進行比較,直到位置最末端,此時第乙個位置的資料即為此排序陣列的最大值。接下來選擇第二個位置的資料,依次與第3、4……、n個位置的資料進行比較,將最大值放入第二個位置。此迴圈方法直到n-1個位置的最大值找到後即可完成選擇排序法由大到小的排列。下面仍然利用陣列6、4、9、8、3的由小到大排序過程來說明選擇排序法的演算方式。

原始資料:6、4、9、8、3

第一次掃瞄:先找到這個陣列中的最小值,與第乙個元素進行交換;

第一次掃瞄過程:第乙個位置的資料與第2、3、4、5個位置的資料依次比較,如果第乙個位置的資料小於等於其中乙個位置的資料,則不變;若大於其中乙個位置的資料則交換位置;則6與4比較,6>4,交換位置得

4、6、9、8、3;因為第乙個位置的資料發生了變化,因此,再次將第乙個位置的資料與第3、4、5個位置的資料比較:4比9和8都小,因此不用交換位置,而4比3小,交換位置為:3、6、9、8、4

因此第一次掃瞄結果:3、6、9、8、4;

第二次掃瞄:先找到這個陣列(除第乙個元素外)中的最小值,與第二個元素進行交換;

第二次掃瞄過程:將第二個位置的資料與第3、4、5個位置的資料依次比較,如果第二個位置的資料小於等於其中乙個位置的資料,則不變;若大於其中乙個位置的資料則交換位置;則6與9、8比較,不交換位置,而6與4比較交換位置得3、4、9、8、6

因此第二次掃瞄結果:3、4、9、8、6

第三次掃瞄:先找到這個陣列(除第

一、二個元素外)中的最小值,與第三個元素進行交換;

第三次掃瞄過程:將第三個位置的資料與第4、5個位置的資料依次比較,如果第三個位置的資料

小於等於其中乙個位置的資料,則不變;若大於其中乙個位置的資料則交換位置;則9與8比較,交換位置得:3、4、8、9、6;然後8再與6比較,交換位置得3、4、6、

9、8

因此第三次掃瞄結果:3、4、6、

9、8第四次掃瞄:先找到這個陣列(除第

一、二、三個元素外)中的最小值,與第四個元素進行交換;

第四次掃瞄過程:將第四個位置的資料與第5個位置的資料進行比較,若小於第5個位置的資料則進行交換,否則不交換,因為9<8,則交換位置得:3、4、6、8、9

因此最終選擇排序的結果為:3、4、6、8、9

對選擇排序法的分析如下:

1、無論是最壞情況、最佳情況及平均情況都需要找到最大值(或最小值),因此比較次數為:(n-1)+(n-2)+……+1=n*(n-1)/2次,時間複雜度為o(n^2);

2、由於選擇排序是每次求出未排序陣列中的最大或最小值與該陣列第乙個鍵值交換,因此是不穩定排序;例如:2(1),2(2),1對其按由小到大排序,這裡2(1)與2(2)表示第乙個2和第二個2,選擇排序後:1、2(2)、2(1),很明顯這兩個2的順序發生變化,則說明選擇排序是不穩定排序。

3、選擇排序只需乙個額外的空間,所以空間複雜度為最佳。

4、此排序法適用於資料量小或有部分資料已經排過序的陣列。

範例程式: /*

[名稱]:選擇排序法 */

#include

#define size 5

void showdata(int *);//宣告輸出陣列程式

void select(int *);//宣告選擇排序函式

int main()

;printf("原始資料為:");

showdata(data);

select(data);

getchar();

return 0;

}void showdata(int data)

void select(int data)

}printf("第%d次排序結果:",(i+1));

showdata(data);}}

輸出結果:

內部排序演算法之三 選擇排序

1.1.基本描述 元素個數為n的陣列,需要按照由小到大的順序進行元素排序。1.2.演算法分析 選擇排序的基本思想 每一趟排序從未排好序的部分元素中選擇乙個值最小的元素,然後將其與這些未排好序的元素的第乙個元素交換位置 容易發現,時間複雜度為o n 2 是 不穩定排序。public class sel...

內部排序 簡單選擇排序

n 個記錄進行簡單選擇排序的基本方法是 通過n i 1 i n 在次關鍵字之間比較,從n i 1個記錄中選出關鍵字最小的記錄,並和第i個記錄進行交換,當i等於n時偶有記錄有序排列。簡單選擇排序是一種不穩定的排序方法,時間複雜度為o n2 在排序過程中僅需要乙個元素作為輔助空間用於陣列元素值的交換,空...

內部排序演算法

內部排序是指待排序列完全存放在記憶體中所進行的排序過程,適合不太大的元素序列。1.快速排序int partition int a,int low,int high a low a high while low2.並歸排序 void merging int list1,int list1 size,i...