Хотел реализовать сортировку вставкой и задался таким вопросом: как мне передать массив в функцию чтобы после обработки его значения не изменились в функции main?
Допустим я хочу передать массив в функцию, чтобы он там сортировался, вывести его в этой же функции, но чтобы при этом значения его не поменялись в функции main.
Если когда я передаю обычную переменную в функцию, то она не изменится, а если массив то там передается указатель на массив и он полюбому изменит свои значения в функции main.
#include
void PrintA(int A[], int N);
void Swap(int *a, int *b);
void InsertionSort(int A[], int N);
int main(void)
{
const int N = 10;
int A[N];
for (int i = 0; i < N; i++)
{
A[i] = 1 + rand() % 9;
}
printf("Array under insertion sort:
");
PrintA(A, N);
InsertionSort(A, N);
/*printf("Array after insertion sort:
");
PrintA(A, N);*/
system("pause");
}
void PrintA(int A[], int N)
{
for (int i = 0; i < N; i++)
{
printf("%d ", A[i]);
}
printf("
");
}
void Swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
void InsertionSort(int A[], int N)
{
int j;
for (int i = 1; i < N; i++)
{
j = i;
while (j > 0 && A[j - 1] > A[j])
{
Swap(&A[j - 1], &A[j]);
j--;
}
}
PrintA(A, N);
}
Пробовал как-то снять указатель на массив, но потом у меня были ошибки с функцией Swap в функции InsertionSort.
Ответ
Только копирую массив во временную переменную а ля template
void InsertionSort(int A[], int N)
{
// Вот здесь:
int template[A.Length];
for(int i = 0;i < A.Length;i++)
{
template[i] = A[i];
}
int j;
for (int i = 1; i < N; i++)
{
j = i;
while (j > 0 && template[j - 1] > template[j])
{
Swap(&template[j - 1], &template[j]);
j--;
}
}
//Передаем наш массив
PrintA(template, N);
}
Комментариев нет:
Отправить комментарий