步驟:將陣列分為『已排序區』和『待排序區』
每一輪從『待排序區』中選擇乙個最小的元素放在『已排序區』的尾部
直到『待排序區』沒有元素為止
過程:第一輪:3 10交換
第二輪:9 4交換
第三輪:8 5交換 以此類推
時間複雜度:o(n2)
選擇排序是不穩定排序:53521 第一次51交換 第乙個5就在第二個5後邊了
步驟:l為左指標指向最左元素,r為右指標指向最右元素,同時選取l的值為基準值
指標前移r–,找到第乙個比基準值小的元素,放在l指標的位置
指標後移l++,找到第乙個比基準值大的元素,放在r指標位置
重複2-3步,直到l與r重合,重合的位置即為基準值所在的位置
這樣,序列就分為了m n 兩部分,前面的數值都小於基準值,後面的數值都大於等於基準值
分別對兩部分進行1-5步驟,遞迴,直至最終排序完成
時間複雜度:o(nlogn),不穩定,當序列完全逆序時,每次序列不能分成兩部分了,時間複雜度退化為o(n2)
快速排序也是不穩定排序
#include
#include
#include
#include
//巨集 兩數交換位置
#define swap(a, b)
//選擇排序
void
select_sort
(int
*num,
int n)
}return;}
//快速排序
void
quick_sort
(int
*num,
int l,
int r)
num[x]
= z;
quick_sort
(num, l, x -1)
;quick_sort
(num, x +
1, r);}
intmain()
;int num2[10]
=;select_sort
(num1,10)
;quick_sort
(num2,0,
9);for
(int i =
0; i <
10; i++
)printf
("\n");
for(
int i =
0; i <
10; i++
)printf
("\n");
return0;
}
資料結構與演算法 排序 選擇排序
資料結構與演算法 排序 選擇排序 sort selectsort include includevoid selectsort int list,int len if print list,len for selectsort int minkey int list,int i,int len if...
資料結構 排序 快速排序
對序列 47,31,83,91,57,18,96,16 進行快速排序 首元素為基準 第二趟排序結果是 正確答案 b 你的答案 c 錯誤 18 31 16 47 57 91 96 83 16 31 18 47 57 91 96 83 16 18 31 47 57 91 96 83 16 18 31 4...
資料結構 排序 快速排序
快速排序在平均情況下是效果最好的排序演算法 每趟子表的排序都是從兩頭向中間交替逼近,接下來舉乙個例子 sorry,上面這個圖的6和5的位置畫反啦,快速排序全域性有序,一趟排序便可以確定基準值的最終位置 類別排序方法 最好時間 最壞時間 平均時間 空間複雜度 穩定性序列特徵 適用於插入排序 直接插入排...