Как отсортировать уже отсортированный массив

У меня есть несколько сортировок в коде, и когда я запускаю компилятор, например, Я сортирую массив первым способом, и как мне тогда сделать так, чтобы при сортировке массива вторым способом я сортировал исходный массив, а не уже отсортированный массив? Пожалуйста, помогите мне, я знаю, что мне нужно создать копию массива и отсортировать его уже, но я не знаю, как это сделать. Вот этот код:

#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);
}

Ответы (0 шт):