归并排序
Posted pengwang52
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了归并排序相关的知识,希望对你有一定的参考价值。
https://www.cnblogs.com/kkun/archive/2011/11/23/2260271.html
#include<iostream> #include <stdio.h> #include <stack> using namespace std; void merge(int *a, int begin, int mid, int end, int * sorted_arr) { int i = begin; int j = mid; int k = 0; while (i < mid && j < end) { if (a[i] < a[j]) { sorted_arr[k] = a[i]; k++; i++; } else { sorted_arr[k] = a[j]; k++; j++; } } while (i < mid) { sorted_arr[k] = a[i]; k++; i++; } while (j < end) { sorted_arr[k] = a[j]; k++; j++; } for (int v =0; v < k; ++v) { a[begin +v] = sorted_arr[v]; } } void merge_sort(int *a, int begin, int end, int * sorted_arr) { if (begin +1 < end) { int mid = (begin + end) / 2; merge_sort(a, begin, mid, sorted_arr); //假设左半部分已完成排序 merge_sort(a, mid, end, sorted_arr); //假设右半部分已完成排序 merge(a, begin, mid, end, sorted_arr); // 归并核心 merge } } int main() { int a[8] = {4, 2, 6, 7, 9, 5, 1, 3}; int length = sizeof(a) / sizeof(a[0]); int* sorted_arr = new int[length]; merge_sort(a, 0, length, sorted_arr); for(int i=0; i < 8; i++) { cout << a[i] << " " << endl; } return 0; }
以上是关于归并排序的主要内容,如果未能解决你的问题,请参考以下文章