尝试理解插入排序算法..
我的算法目前看起来像这样:
void insertionSort(int *array, int N) {
int value;
int hole;
int *array2;
for (int i = 1; i < N - 1; i++) {
value = array[i]; //next item to be inserted in array 2
hole = i;
while (hole > 0 && array[hole - 1] > value) {
array[hole] = array[hole - 1];
hole = hole - 1;
}
array[hole] = value;
}
}
我的算法适用于排序数组,但是我现在需要更改它,以便我一次构建一个新的排序数组(array2),而不是仅使用原始数组。
根据我完成的算法,是否有一种简单的方法可以实现这一点? 感谢。
答案 0 :(得分:-2)
您可以使用以下方法:
int *array2 = calloc(N, sizeof(int));
for(var index = 0; index < N; index++)
{
array2[index] = array[index];
}
之后使用array2而不是array 然后只需将函数的原型更改为int * insertionSort 剩下的就是在任务结束时返回array2 但要注意内存泄漏:https://en.wikipedia.org/wiki/Memory_leak