/**
* 归并排序
*
* ①算法思想
*
* ②算法设计
*
*/
#include <stdio.h>
#include <iostream>
#include <cstdio>
#include <malloc.h>
#include <cstdlib>
#define MaxSize 20
#define INF 999999
//归并排序
//“归并”
int *temp = (int*)malloc(sizeof(int) * MaxSize);//MaxSize应该写成arr的长度n
void Merge(int arr[],int low,int mid,int high){//先复制过去
for (int i = low; i <= high ; ++i) {
temp[i] = arr[i];
}
int i = low,j = mid + 1,k = low;
while(i <= mid && j <= high ){
if(temp[i] <= temp[j])//等号写在这保证了稳定性
arr[k++] = temp[i++];
else
arr[k++] = temp[j++];
}
while(i <= mid){
arr[k++] = temp[i++];
}
while(j <= high){
arr[k++] = temp[j++];
}
}
//“分”
void MergeSort(int arr[],int low,int high){
if(low < high){//low 小于 high 的时候就只有一个元素了,最少的时候应该是得有两个元素
int mid = (low + high) / 2;
MergeSort(arr,low,mid);
MergeSort(arr,mid + 1,high);
Merge(arr,low,high,mid);
}
}
归并排序和基数排序(归并)
最新推荐文章于 2024-07-06 16:11:18 发布