插入排序 歸併排序

2021-08-05 20:35:23 字數 1846 閱讀 8647

一直沒自己寫過 然後自己寫了下

其實我主要查的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 上面做了兩道測試題,因此就對插入排序和歸併排序做乙個簡單的小結吧,就當做是我的學習筆記,大佬請勿嘲笑!關於插入排序主要的思想就是從左到右的遍歷乙個序列,有乙個標識來標記,保...