每一趟從待排序的資料元素中選出最小(或最大)的乙個元素,順序放在已排好序的數列的最後,直到全部待排序的資料元素排完。 選擇排序是不穩定的排序方法。
如果在 c 語言中去實現選擇排序,我們最常見的就是兩層迴圈的實現方式。從選擇排序的思想出發,我們都不難看出:
n-s圖如下:
演算法如下:
for i = [0, n-2]
select min number from sortobjects after num[i]
if num[i] isnt the min number
swap the min number with num[i]
**如下:
//選擇排序
#includeint main()*/
for(i=0;ia[max])
}
temp=a[i];
a[i]=a[max];
a[max]=temp;//將a[i+1]到a[10]中最大值與a[i]交換
} for(i=0;i氣泡排序的基本思想是將陣列中的每個相鄰元素進行兩兩比較,按照小元素在前(或大元素在前)的原則確定是否進行交換。這樣每一輪執行之後,最大(或最小)的元素就會被交換到了最後一位。
完成一輪之後,我們可以再從頭進行第二輪的比較,直到倒數第二位(因為最後一位已經是被排序好的了)時結束。這樣一輪之後,第二大(或第二小)的元素就會被交換到了倒數第二位。
同樣的過程會依次進行,直到所有元素都被排列成預期的順序為止。這個過程是不是很像是水中的起泡乙個個冒起來的過程.
演算法如下:如果在 c 語言中去實現氣泡排序,我們最常見的就是兩層for迴圈的實現方式。
如果我們有 5個數待排序,我們可以會在程式中寫出這樣的片段:
for(j=0;j<5;j++)
}
i和j都是用於作為陣列索引的變數,swap是乙個交換值的函式.
區別主要在交換的方式上
每一輪都把最大或最小的元素篩選出來放在相應的位置上
這是相同的
但是對於每一輪
比如第一輪
要把1~n 中最大的那個放到n這個位置
冒泡法每次比較和移動相鄰的兩項
而選擇排序每次交換當前項和第n項
我把**寫出來你就懂了:
冒泡:for i:=1 to n-1 do
if (a[i]>a[i+1]) then swap(i,i+1);
選擇:for i:=1 to n-1 do
if (a[i]>a[n]) then swap(i,n);
(swap 表示交換)
總的來說,兩種排序比較的次數是相同的
但交換的次數,選擇排序是更少的
雖然兩者的時間複雜度都是 o(n^2)
但通常,選擇排序更快一點
氣泡排序是每一次都可能要交換
而選擇排序是在比較時記下a[i]的位置 最後來交換
所以他們的交換過程是不一樣的 而查詢的過程是一樣的
效率不會比冒泡的低…
選擇排序與氣泡排序的比較
選擇排序 selection sort 演算法核心思想 每一趟在n i 1 i 1 個記錄中選取關鍵字最小的記錄作為序列中的第i個記錄 簡單選擇操作 通過n i次關鍵字間的比較,從n i 1個記錄中選出關鍵字最小的記錄,並和第i 1 i n 個記錄交換之,先看乙個依選擇排序思想的 int selec...
選擇排序與氣泡排序的區別
氣泡排序 氣泡排序 bubblesort 的基本概念是 依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即在第一趟 首先比較第1個和第2個數,將小數放前,大數 放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。至此第一趟結束,將最大的數放...
選擇排序與氣泡排序的區別
選擇排序 selection sort 是一種簡單直觀的排序演算法。它的工作原理是每一次從待排序的資料元素中選出最小 或最大 的乙個元素,存放在序列的起始位置,直到全部待排序的資料元素排完。選擇排序是不穩定的排序方法。氣泡排序 bubble sort 是一種計算解學領域的較簡單的排序演算法。它重複地...