簡單選擇排序(****** selection sort)在八大排序中是最容易理解的部分
演算法(從小到大):
在要排序的序列中,從頭到尾遍歷,選出最小的數與第乙個位置的數交換。
在剩餘的序列中,從頭到尾遍歷,選出最小的數與剩餘序列第乙個位置的數交換(原序列第二個位置),不斷地迴圈下去,直至序列只剩下乙個數。
演算法演示:
2 34 34 1 40 45 78 32 91
第一次遍歷: 1
34 34 2 40 45 78 32 91
第二次遍歷
12 34 3440 45 78 32 9
1。。。。
void
select_sort(datatype r,
int
n)
}
}
時間複雜度:
最差情況:初始序列的第乙個數最大,後面序列按照從小到大一次排列,則需要移動次數為n次。
需要比較的次數與初始序列的狀態無關,共需要比較的次數是 (n-1)+(n-2)+(n-3)+...+1=n*(n-1)/2
總共時間複雜度是o(n2)
空間複雜度:o(1)
穩定性:不穩定,由上面的演算法演示中可以看出,兩個34,排序之後相對順序是會發生改變的
簡單選擇排序的過程中每一次遍歷都是尋找最小值,但是也可以對其改進,在每一次遍歷的過程中都尋找剩餘序列的最小值和最大值,那樣就可以節約很多時間
(借鑑 -- 高傑才)
void sort(int a, intn)
if(a[min]>a[j])
}temp = a[i-1];
a[i-1] =a[min];
a[min] =temp;
temp = a[n-i];
a[n-i] =a[max];
a[max] =temp;
}}
(以上**有待修改)
內部排序演算法之三 選擇排序
1.1.基本描述 元素個數為n的陣列,需要按照由小到大的順序進行元素排序。1.2.演算法分析 選擇排序的基本思想 每一趟排序從未排好序的部分元素中選擇乙個值最小的元素,然後將其與這些未排好序的元素的第乙個元素交換位置 容易發現,時間複雜度為o n 2 是 不穩定排序。public class sel...
排序演算法之 直接選擇排序(三)
直接選擇排序與直接插入排序類似,都將資料分為有序區與無序 區,不同點 直接插入排序是將無序區第乙個元素直接插入到有序區形成 更大的有序區,直接選擇排序是從無序區選乙個最小的元素直接放到有序區最後 include include include define n 10 using namespace ...
排序演算法(直接選擇排序)
為什麼我們要叫直接選擇排序呢?在最開始的時候,待排序區間是整個陣列,從區間選乙個最小的與區間第乙個交換位置,然後將待排序區間從第二個開始,繼續以上操作,直至待排序區間長度為0 我們還是以為例 初始 3 5 7 9 8 6 2 1 4 0 第一趟 05 7 9 8 6 2 1 4 3 第二趟 0 17...