归并排序和基数排序
文章目录:
- 归并排序
- 基数排序
1.归并排序
1.算法思想
2.图解
3.核心代码
4.具体代码
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 10
void MergeSort(int k[], int n)
{
// i 用于 for 循环迭代,temp 用来存储临时数组,所以要给他分配内存
int i, next, left_min, left_max, right_min, right_max;
int *temp = (int *)malloc(n * sizeof(int));
// i 是步长,第一次是1个元素与1个元素相比,第2个是两个元素与2个元素相比
for( i=1; i < n; i*=2 )
{
// left_min 最后是要小于 n-i 的,这一点可以通过画图得到
// left_min = right_max 是指上一组排序完成之后,将上一组的 right 赋值给下一组的 left_min
for( left_min=0; left_min < n-i; left_min = right_max )
{
right_min = left_max = left_min + i;
right_max = left_max + i;
// 因为奇数的数组最后很有可能 right_max > n,所以将它限制到最大为 n
if( right_max > n )
{
right_max = n;
}
next = 0;
// 在这里跟递归中的归并操是一样的,从两个数组中取小的出来放入临时数组
while( left_min < left_max && right_min < right_max )