I have written this code for quicksort without taking any online help. Can someone suggest any case when it will fail ?
I am not able to find any fail case for this.

    #include<iostream>
    
    using namespace std;
    void quicksort(int*, int, int);
    void print(int *p, int n)
    {
        for(int i=0; i < n; ++i)
            cout << p[i] << ' ' ;
        cout << endl;
    }
    int main()
    {
        int arr[] = {10,10,15,15,23,5,55,8,6,0,32,10,100};
        int len = sizeof(arr)/sizeof(int);
        
        cout << "Before sort:\n";
        print(arr,len);
        quicksort(arr,0,len-1);
        
        cout << "After sort:\n";
        print(arr,len);
    }
    
    void quicksort(int *arr, int start, int end)
    {
        if(start >= end)
            return;
        int pivot = arr[end];
        
        int i=start,j=start;
        for(;j < end; ++j)
            if(arr[j] < pivot)
            {
                swap(arr[i],arr[j]);
                ++i;
            }
        swap(arr[i],arr[end]);
        
        quicksort(arr,0,i-1);
        quicksort(arr,i+1,end);
    }