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 ...