選擇排序的基本思想是:對待排序的記錄序列進行n-1遍的處理,第1遍處理是將l[1..n]中最小者與l[1]交換位置,第2遍處理是將l[2..n]中最小者與l[2]交換位置,......,第i遍處理是將l[i..n]中最小者與l[i]交換位置。這樣,經過i遍處理之後,前i個記錄的位置就已經按從小到大的順序排列好了。
當然,實際操作時,也可以根據需要,通過從待排序的記錄中選擇最大者與其首記錄交換位置,按從大到小的順序進行排序處理。
選擇排序演算法可實現如下:
procedure selection_sort(var l:list);
vari,j,s:position;
begin
for i:=first(l) to last(l)-1 do
begin
s:=i;
for j:=i+1 to last(l) do
if l[j]< l[s] then s:=j; //記錄l[i..n]中最小元素的位置
swap(l[i],l[s]); //交換l[i],l[s]
end;
end;
演算法selection_sort中裡面的乙個for迴圈需要進行n-i次比較,所以整個演算法需要
次比較,顯而易見,演算法selection_sort中共呼叫了n-1次swap過程,即進行了n-1次交換。因而,演算法selection_sort的時間複雜性f(n)=o(n
2)。
procedure sort;
var i,j,k:integer;
begin
for i:=1 to n-1 do begin
k:=i;
for j:=i+1 to n do
if a[j]< a[k] then k:=j;
if k< >i then begin
a[0]:=a[k];a[k]:=a[i];a[i]:=a[0];
end;
end;
end;
基礎演算法之選擇排序Selection Sort
原理 首先在未排序序列中找到最小 大 元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小 大 元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。一種簡單直觀的排序演算法。例子將陣列 3,6,4,2,5,1 進行從大到小排序 排序步驟 第一趟找到最小數1,放到最前邊...
排序 選擇排序 選擇排序 堆排序
寫在前面 上傳github交換排序選擇排序 堆排序 選擇排序 顧名思義,我們就可以猜到,它是原則合適的元素放到合適的位置 從圖中,我們可以得到 1.用第乙個元素,和其他所有的元素進行比較,找出最小的,然後進行交換 2.然後進行,資料的遞增 3.直到資料全部有序 void selectsort int...
選擇排序 直接選擇排序
演算法思想 在每一趟的排序中,從待排序列中選出關鍵字最小或者最大的元素放在其最終的位置上 過程分析 在第i趟直接排序中,通過n i次關鍵字的比較,從n i 1個元素中選出關鍵字最小的元素 與第i個元素進行交換。經過n 1趟比較,直到表有序為止 效能分析 時間複雜度o n 2 include defi...