排序演算法詳解 選擇 插入 歸併和快排

2021-09-26 13:56:26 字數 1386 閱讀 4376

特點:每次從待排序序列中選取最小值最為當前元素值

流程:已排好序的陣列為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...