第一周演算法總結(歸併排序 插入排序)

2021-09-28 14:39:43 字數 1541 閱讀 3429

1.插入排序

原理與玩撲克牌的插牌方式相同,不在多說。

**如下:

oid pr(vector&a)

a[i + 1]=key;

}}

2.歸併演算法

歸併演算法的原理很簡單,**實現分為遞迴與非遞迴實現,先進行遞迴實現

遞迴的原理是把整個陣列分為最簡單的單一元素,然後單一元素可以看作乙個整體

的組,利用合併演算法合併就可以很輕鬆的實現排序的目的。

利用遞迴樹可以很清楚的知道。

**如下

void sort(vector&a, int l, int m, int r)

else

}if (i > m)

else

int k = 0;

for (int i = l; i <= r; i++) }

void pr(vector&a,int l,int r)

}

3。二分查詢

原理比較簡單,但思想非常重要,非遞迴**如下

int pr(vector&a, int l, int r,int n)

if (n == a[q])

if (n < a[q])

q = (l + r) / 2;

}}

遞迴**如下

int pr(vector&a, int l, int r,int n)

if (a[q] < n)

}}

4.在歸併排序中使用插入排序

void merge(vector&a, int r, int m, int l)//選擇演算法

else

}if (i > m) }

else }

j = 0;

for (int i = r; i <= l; i++,j++) }

void choicesort(vector&a, int l, int r)

a[j + 1] = key; }}

void mergesort(vector&a, int r, int l, int k)

choicesort(a, i - 1, l);

merge(a, 0, i - 1, l);

}

5.利用歸併排序求逆序對

逆序對代表的是下標i與j,雖然ia[j];代表逆序對。

歸併排序中我們把陣列分成兩部分,我們可以知道,分到最後只剩下

單一元素的時候,兩個部分比較,確定是否存在逆序對,然後合併到一起

,然後合併到一起的部分,與另乙個合併起來的部分進行,比較,依次類推。

**如下

int value = 0;

void br(vector&a, int l, int m, int r)

j++;

if (j > r)

}}void pr(vector&a, int l, int r)

}

插入排序 歸併排序

插入排序 define len 5 int a len void insertion sort void int i,j,k for j 1 j len j k a j i j 1 while i 0 a i k a i 1 a i i a i 1 k 歸併排序 int a 8 void merge...

插入排序 歸併排序

演算法導論初涉,第一講練習內容 include define n 6 int a n void init 初始化陣列 a i 1 k void output int a,int n void merge int low,int mid,int high while s mid b i a s whi...

插入排序 歸併排序

一直沒自己寫過 然後自己寫了下 其實我主要查的wikipedia 插入排序 歸併排序 先插排 插入排序 英語 insertion sort 是一種簡單直觀的 排序演算法 它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。插入排序 在實現上,通常採用in ...