以下代码是做插入排序的例子,未排序数据list,按照顺序插入到结果数组result中。
在用第六个元素33插入已经排序好的结果数组result时,发现传入的结果数组发生了变化,产生了脏数据。这是为什么呢?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "insert.h"
#define MAX_NUMBER 7
int main()
{
int list[MAX_NUMBER] = {57,48,79,65,15,33,52};
int* result;
int signal = 0;//this is the flag of already inserted
result = malloc(sizeof(int));
memset(result, 0, 1);
result[0] = list[0];
for(int i = 1; i < MAX_NUMBER; i++)
{
for(int j = 0; j < i; j++)
{
if(result[j] >= list[i])
{
result = insert(result, i, j, list[i]);
signal = 1;
break;
}
}
if(signal == 0)
{
result = insert(result, i, i, list[i]);
}
signal = 0;
}
for(int k = 0; k < MAX_NUMBER; k++)
{
printf("%d\n", result[k]);
}
return 0;
}
int* insert(int* const array, size_t len, int pos, int value)
{
int *newarray;
newarray = malloc(sizeof(int)*(len & INT32_MAX + 1));
if( len >= pos)
{
memcpy(newarray, array, sizeof(int)*pos);
newarray[pos] = value;
memcpy(newarray + pos + 1, array + pos, sizeof(int)*(len - pos));
}else{
return array;
}
return newarray;
}
在33插入之前,result数组的结果是{15,48,57,65,79}
而在插入33后,result队列已经变成了{15,33,48,52,57,15,33}
这个现象并不是每一次发生,有大概一小部分情况会显示正确的序列。这是为什么呢?