Hello.

I am trying to code a merge sort algoritm, using my knowledge of C++. I have made some code but it is not working. It is giving some random results.

Can you please look at my code and see improvements I can make.

Thanks?

Code:
#include <cstdlib>
#include <iostream>

using namespace std;

void print(int *niz) {
    for (int f1=0; niz[f1]!='\0'; f1++) {
        cout << niz[f1] << " ";
    }
    cout << endl;
}

void merge(int *niz, int low, int medium, int high) {    
    int *niz2 = new int[high-low];
    
    int bottom = low;
    int top = medium-1;
    
    for (int f1=low; f1<high; f1++) {
        if(bottom>medium) {
            niz2[f1-low] = niz[top++];
        }
        else if(top>high) {
            niz2[f1-low] = niz[bottom++];
        }
        else if(niz[bottom]<niz[top]) {
            niz2[f1-low] = niz[bottom++];
        }
        else {
            niz2[f1-low] = niz[top++];            
        }
    }
    
    for (int f1=low; f1<high; f1++) {
        niz[f1]=niz2[f1-low];
    }
    
    delete [] niz2;
}

void merge_sort(int *niz, int low, int high) {
    if(low < high) {
        int middle = (high+low)/2;
        merge_sort(niz, low, middle);
        merge_sort(niz, middle+1, high);
        merge(niz, low, middle, high);
    }
}

int main(int argc, char** argv) {

    srand((unsigned)time(0));
    
    int velicina = 10;
    int *niz = new int[velicina];
    
    for (int f1=0; f1<velicina; f1++) {
        niz[f1] = rand()%10+1;
    }
    
    print(niz);
    
    merge_sort(niz, 0, velicina-1);
    
    print(niz);
    cout << "kraj" << endl;
    
    return 0;
}