对于归并算法的四点改进
1.不回写,可以减少一半的数组移动
2.不递归 ,可以加快执行速度
3.无逆序,分段的时候递增的为一段,段数不确定
4.与插入相结合,因为数列个数在16以内的话插入排序会比归并排序要快
实现代码如下,代码写的比较匆忙,控制语句还是可以再缩减的,大家仅作为一个参考即可
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <time.h>
/**********************************************************
*归并算法的改进
*1.不回写
*2.不递归
*3.无逆序
*4.与插入相结合
**********************************************************/
void main()
{
int n;
printf("请输入数列个数:\n");
scanf("%d",&n);
//动态申请数组
int *a = (int *)malloc(n*sizeof(int)); //数据数组
int *b = (int *)malloc(n*sizeof(int)); //辅助数组
int *c = (int *)malloc(n*sizeof(int)); //记录分段的下标
int size = 1; //记录段数
int count = 0; //标记
int flag = 0;
//初始化数据数组,随机生成值
srand(time(0));
for(int i=0; i<n; i++)
{
a[i] = rand()%100;
}
//求分段坐标,只记录每个段的起始位置
i=0;
c[0] = 0;
while(i<n-1)
{
while(i<n-1 && a[i] <= a[i+1])
{
i++;
}
if(i == n-1)
{
break;
}
c[size++] = ++i;
}
c[size] = n;
//输出排序前的数列
printf("\n"