归并排序

来源:互联网 发布:霍华德生涯最好数据 编辑:程序博客网 时间:2024/06/06 10:55

先递归分解序列,再合并有序数列

#include <iostream>#include <cstdlib>#include <vector>using namespace std;#define random(x) (rand()%x)void merge_array(int nums[], int first, int mid, int last, int temp[]){int index1 = first, index2 = mid + 1, index = 0;while(index1 <= mid && index2 <= last){if(nums[index1] <= nums[index2])temp[index++] = nums[index1++];elsetemp[index++] = nums[index2++];}while(index1 <= mid)temp[index++] = nums[index1++];while(index2 <= last)temp[index++] = nums[index2++];for(int i = 0; i < index; i++)nums[first + i] = temp[i];}void merge_sort_recursively(int nums[], int first, int last, int temp[]){if(first < last){int mid = (first + last) / 2;merge_sort_recursively(nums, first, mid, temp);merge_sort_recursively(nums, mid + 1, last, temp);merge_array(nums, first, mid, last, temp);}}bool merge_sort(int nums[], int length){int *p = new int[length];if(p == NULL) return false;merge_sort_recursively(nums, 0, length - 1, p);delete p;return true;}void print_num(int nums[], int length){for(int i = 1; i < length; i++)cout << nums[i] << ' ';cout << endl;}int main(){int nums[10] = {0};for(int i = 0; i < 10; i++){int num = random(10);nums[i] = num;}print_num(nums, 10);merge_sort(nums, 10);print_num(nums, 10);return 0;}


0 0