資料結構 排序演算法之歸併排序

2021-08-19 16:09:04 字數 1463 閱讀 4185

【演算法思想】歸併排序是利用歸併的思想實現的排序方法,該演算法採用「分而治之」的思想將問題分成一些小的問題然後遞迴實現,最後合而為之。

【**實現】

----->遞迴實現

void merge(int* arr, const int left, const int mid, const int right, int *temp)

while (i < mid)//若第乙個區間未檢測完,直接複製過來

while (j < right)//若第二個區間未檢測完,直接複製過來

//將已經排好序的輔助空間的值拷貝到原陣列arr中

memcpy(arr + left, temp + left, (right - left)*sizeof(int));

}void _mergesort(int *arr,int left,int right,int *temp)

}void mergesort(int *arr, int size)

------->非遞迴實現

void merge(int* arr, const int left, const int mid, const int right, int *temp)

while (i < mid)//若第乙個區間未檢測完,直接複製過來

while (j < right)//若第二個區間未檢測完,直接複製過來

//將已經排好序的輔助空間的值拷貝到原陣列arr中

memcpy(arr + left, temp + left, (right - left)*sizeof(int));

}void mergesortnor(int *arr, int size)

if (right > size)//如果越界

merge(arr, left, mid, right, temp);

} gap *= 2;

} delete temp;

}

----->測試**

void print(int* arr, int sz)

printf("\n");

}int main()

; print(arr, sizeof(arr) / sizeof(arr[0]));

mergesort(arr,sizeof(arr) / sizeof(arr[0]));

//mergesortnor(arr, sizeof(arr) / sizeof(arr[0]));

print(arr, sizeof(arr) / sizeof(arr[0]));

getchar();

return 0;

}

**如存在問題,歡迎指導~~~~!

資料結構 排序演算法之歸併排序

基本思想 將待排序的元素序列分成兩個等長的子串行,再將子串行劃分子串行,直到子串行中只有乙個元素就不用在對子序列繼續進行劃分,將劃分的每個區塊,進行排序,然後再將其歸併到乙個序列中,直到將所有的子串行歸併完成之後,則這個序列就完成了排序。1 基本思想如下所示 經過上面的劃分,從而可以看出經過劃分與歸...

資料結構之排序 歸併排序

四 歸併排序 歸併 把若干個有序的數列,合成乙個有序的數列 如二路歸併 void merge int d1,int len1,int d2,int len2,int tmp while i len1 tmp k d1 i while j len2 tmp k d2 j 1,二路歸併排序 迭代法 把待...

資料結構 排序之歸併排序

歸併,即 遞迴合併 q 我們排序的目的是什麼?a 讓無序的序列變得有序。比如說,下面有乙個序列 排序前排序後 7654321 1234567 如果我們將這個序列從中間附近分開,分成兩個子串行,想辦法讓這兩個子串行變得有序。然後再把兩個有序的子串行合併成乙個有序的子串行,那麼我們的排序不就完成了嗎?如...