一直沒自己寫過 然後自己寫了下
其實我主要查的wikipedia 插入排序
歸併排序
先插排 插入排序
(英語:insertion sort
)是一種簡單直觀的
排序演算法
。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。
插入排序
在實現上,通常採用in-place排序(即只需用到o(1)的額外空間的排序),因而在從後向前掃瞄過程中,需要反覆把已排序元素逐步向後挪位,為最新元素提供插入空間。
演算法描述
一般來說,插入排序都採用in-place在陣列上實現。具體演算法描述如下:
從第乙個元素開始,該元素可以認為已經被排序
取出下乙個元素,在已經排序的元素序列中從後向前掃瞄
如果該元素(已排序)大於新元素,將該元素移到下一位置
重複步驟3,直到找到已排序的元素小於或者等於新元素的位置
將新元素插入到該位置後
重複步驟2~5
如果比較操作的代價比交換操作大的話,可以採用二分查詢法來減少比較操作的數目。該演算法可以認為是插入排序的乙個變種,稱為二分查詢插入排序。
歸併排序
歸併排序
(英語:merge sort
,或mergesort
),是建立在歸併操作上的一種有效的
排序演算法
,效率為
o(n log n)。2023年由
約翰·馮·諾伊曼
首次提出。該演算法是採用
分治法(divide and conquer)的乙個非常典型的應用,且各層分治遞迴可以同時進行。
演算法描述
歸併操作(merge),也叫歸併演算法,指的是將兩個已經排序的序列合併成乙個序列的操作。歸併排序演算法依賴歸併操作。
申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合併後的序列
設定兩個指標,最初位置分別為兩個已經排序序列的起始位置
比較兩個指標所指向的元素,選擇相對小的元素放入到合併空間,並移動指標到下一位置
重複步驟3直到某一指標到達序列尾
將另一串行剩下的所有元素直接複製到合併序列尾
原理如下(假設序列共有n個元素):
將序列每相鄰兩個數字進行歸併操作,形成
將上述序列再次歸併,形成
重複步驟2,直到所有元素排序完畢
上自己**
#include#include #include#includeusing namespace std;
//之前一直沒有寫過插入排序和歸併排序,所以就很方
//插入排序
void insertion_sort(int arr, int len)
arr[j + 1] = temp;
//被排序數放到正確的位置
}}//寫個非遞迴的歸併排序
int min(int x, int y)
void merge_sort_d(int arr, int len)
int* temp = a;
a = b;
b = temp;
} if (a != arr)
free(b);
}//遞迴的歸併排序
void merge_sort_recursive(int arr, int reg, int start, int end)
void merge_sort_r(int arr, const int len)
int main()
; insertion_sort(a,10);
cout<
插入排序 歸併排序
插入排序 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...
插入排序與歸併排序
關於排序似乎從大一開始學習變成就開始在使用各種排序方法了,今天看了下有關於插入排序和歸併排序的內容,並且對應在leetcode 上面做了兩道測試題,因此就對插入排序和歸併排序做乙個簡單的小結吧,就當做是我的學習筆記,大佬請勿嘲笑!關於插入排序主要的思想就是從左到右的遍歷乙個序列,有乙個標識來標記,保...