特點:每次從待排序序列中選取最小值最為當前元素值
流程:已排好序的陣列為a[0,i-1],將未排序序列a[i,n)中最小值賦給a[i]。
const
int maxn =
10000
;int a[maxn]
;void
selectsort
(int a,
int n)
}}
特點:將未排序元素插入到已排序元素的合適位置上
流程:已排好序的陣列為a[0,i-1],對於當前元素temp,在a[0,i-1]中找到temp的位置插入, 並將其他元素往後挪動一位。
void
insertsort
(int a,
int n)
a[j]
= temp;
// 找到合適位置,插入
}}
特點:分而治之,將陣列不斷二分再分別排序,最後將排好序的子陣列合併成乙個有序陣列。
const
int maxn =
1e5;
int a[maxn]
;//將陣列a[l1,r1]和a[l2,r2]合併成乙個有序陣列
void
merge
(int a,
int l1,
int r1,
int l2,
int r2)
while
(i<=r1) temp[index++
]=a[i++];
while
(j<=r2) temp[index++
]=a[j++];
for(
int i =
0; i < index;
++i)
}// left=0, right=n-1
void
mergesort
(int a,
int left,
int right)
}
特點:與歸併排序不同,不是將陣列不斷等分,而是隨機選取乙個標桿pivot將陣列分為兩部分,比pivot小的放左邊,大的放右邊,不斷遞迴到每個部分只有乙個元素。
int
partition
(int a,
int left,
int right)
a[left]
= temp;
return left;
}// left=0, right=n-1
void
quicksort
(int a,
int left,
int right)
}
演算法整理 排序(歸併和快排)
趁找工作之際,著手對演算法進行相關學習和整理,便於自己複習鞏固,也以此來督促自己進行演算法的研究學習。通過對演算法的整理,一方面希望對於自己有所提高,另一方面,也希望提高自己的書面表達能力,文中有所不正確的地方,望批評指出,多謝。對於演算法學習,從簡單到複雜。今天主要整理一下排序相關的演算法。對於排...
排序演算法 插入 選擇 冒泡 快排 歸併
可以找一些帖子理解下幾類排序演算法或者聽下陳越姥姥在mooc上的資料結構 選擇類排序 交換類排序 歸併排序 基數排序 拓撲排序 從待排序的n個記錄中的第二個記錄開始,依次與前面的記錄比較並尋找插入的位置,每次外迴圈結束後,將當前的數插入到合適的位置。void sort insert int a,in...
排序演算法 冒泡 插入 歸併 快排
整理了一下幾種常見的排序演算法,包括冒泡 插入 歸併 快排。還有另外幾種待整理 堆排序 希爾排序 桶排序 直接上 include include include using namespace std void swap int a,int b 最簡單的氣泡排序,時間複雜度o n n void bu...