赞
踩
归并排序是一种分治算法,它将列表分割成较小的子列表,然后递归地对子列表进行排序,最后将这些子列表合并以产生已排序的列表。基本概念包括:
设置单页面启动:
归并排序项目结构:
归并排序cpp代码截图:
归并排序cpp代码:
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <math.h> #include <iostream> #include <string.h> #include <time.h> #include <sys/timeb.h> #define MAX 10 using namespace std; int* CreateArray() { // 开辟内存空间 srand((unsigned int)time(NULL)); int* arr = (int*)malloc(sizeof(int) * MAX); for (int i = 0; i < MAX; i++) { arr[i] = rand() % MAX; } return arr; } // 打印函数 void PrintArray(int arr[], int length) { for (int i = 0; i < length; i++) { cout << arr[i] << " "; } cout << endl; } // 合并算法 void Merge(int arr[], int start, int end,int mid, int* temp) { int i_start = start; int i_end = mid; int j_start = mid + 1; int j_end = end; // 表示辅助空间有多少个元素 int length = 0; // 合并两个有序序列 while (i_start <= i_end && j_start <= j_end) { if (arr[i_start] < arr[j_start]) { temp[length] = arr[i_start]; length++; i_start++; } else { temp[length] = arr[j_start]; j_start++; length++; } } // 遍历i这个序列 while (i_start <= i_end) { temp[length] = arr[i_start]; i_start++; length++; } // 遍历j序列 while (j_start <= j_end) { temp[length] = arr[j_start]; length++; j_start++; } // 将辅助空间中的数据覆盖到原来的空间 for (int i = 0; i < length; i++) { arr[start + i] = temp[i]; } } // 排序函数:归并排序 void MergeSort(int arr[],int start,int end,int* temp) { if (start >= end) { return; } int mid = (start + end) / 2; // 分组:左半边 MergeSort(arr,start,mid,temp); // 分组:右半边 MergeSort(arr, mid + 1, end, temp); // 合并 Merge(arr,start,end,mid,temp); } int main() { // 创建一个数组 int* myArr = CreateArray(); PrintArray(myArr, MAX); // 辅助空间 int* temp = (int*)malloc(sizeof(int) * MAX); MergeSort(myArr, 0, MAX - 1,temp); PrintArray(myArr, MAX); // 释放空间 free(temp); free(myArr); }
归并排序运行结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。