Как отсортировать уже отсортированный массив
У меня есть несколько сортировок в коде, и когда я запускаю компилятор, например, Я сортирую массив первым способом, и как мне тогда сделать так, чтобы при сортировке массива вторым способом я сортировал исходный массив, а не уже отсортированный массив? Пожалуйста, помогите мне, я знаю, что мне нужно создать копию массива и отсортировать его уже, но я не знаю, как это сделать. Вот этот код:
#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
#include "locale.h"
#include "memory.h"
#include "windows.h"
#include "time.h"
void Print(int* B, int n);
void swap2(int* B, int i)
{
int tmp;
int k = 0;
tmp = B[i];
B[i] = B[i - 1];
B[i - 1] = tmp;
k = i;
}
void swap1(int* B, int i)
{
int tmp;
int k = 0;
tmp = B[i];
B[i] = B[i + 1];
B[i + 1] = tmp;
k = i;
}
void randArray(int* B, int n, int a, int b)
{
int i;
for (i = 0; i < n; i++)
B[i] = rand() % (b - a) + a;
}
void specArray(int* B, int n)
{
printf("Введите элементы массива:\n");
for (int i = 0; i < n; i++)
scanf_s("%d", &B[i]);
}
void Print(int* B, int n)
{
int i;
for (i = 0; i < n; i++)
{
printf("%d ", B[i]);
}
printf("\n");
}
void DibBubbleSort(int *B, int n, int* nc, int* nsw)
{
int i;
int k = 0;
int left = 0;
int right = n - 1;
while (left < right)
{
for (i = left; i < right; i++)
{
(*nc)++;
if (B[i] > B[i + 1])
{
swap1(B, i);
(*nsw)++;
}
}
right = k;
for (i = right; i > left; i--)
{
(*nc)++;
if (B[i] > B[i - 1])
{
swap2(B, i);
(*nsw)++;
}
}
left = k;
}
}
void Split(int *B, int left, int right, int* nc, int* nsw)
{
int mid, i, j, tmp;
mid = B[(right + left) / 2];
i = left;
j = right;
while (i < j)
{
while (B[i] < mid)
{
i++;
}
while (B[j] > mid)
{
j--;
}
(*nc)++;
if (i <= j)
{
tmp = B[i];
B[i] = B[j];
B[j] = tmp;
i++;
j--;
(*nsw)++;
}
}
if (left < j)
Split(B, left, j, &(*nc), &(*nsw));
if (i < right)
Split(B, i, right, &(*nc), &(*nsw));
}
void spawnarray1(int** B, int n)
{
*B = (int*)malloc(n * sizeof(int));
}
void menu()
{
printf("\nMENU:\n");
printf("1. Количество элементов массива\n");
printf("2. Ввод заданного массива\n");
printf("3. Ввод рандомного массива\n");
printf("4. Быстрая сортировка\n");
printf("5. Сортировка двунаправленным пузырьком\n");
printf("0. Exit\n");
}
void main()
{
int* B = NULL;
int n, a, b;
int t = 10;
setlocale(LC_ALL, "Russian");
printf("start\n");
srand(1000);
while (t != 0)
{
menu();
scanf_s("%d", &t);
switch (t)
{
case 1: {
printf("Введите количество элементов массива\n");
scanf_s("%d", &n);
spawnarray1(&B, n);
break;
}
case 2: {
specArray(B, n);
break;
}
case 3: {
printf("Введите наименьший элемент массива\n");
scanf_s("%d", &a);
printf("Введите наибольший элемент массива\n");
scanf_s("%d", &b);
randArray(B, n, a, b);
Print(B, n);
break;
}
case 4: {
int nc = 0, nsw = 0;
Split(B, 0, n - 1, &nc, &nsw);
Print(B, n);
printf("Перестановки:%d\n Сравнения:%d\n", nsw, nc);
break;
}
case 5: {
int nc = 0, nsw = 0;
DibBubbleSort(B, n, &nc, &nsw);
Print(B, n);
printf("Перестановки:%d\n Сравнения:%d\n", nsw, nc);
break;
}
break;
}
}
free(B);
}