Witam wszystkich.Mam problem z algorytmem sortowania.To połączenie dwóch typów algorytmu, ale coś mi nie działa, widzi ktoś jaki błąd popełniłem?

 public static void prosteWstawianieB(int []tab,int n) {
                                              
                              for (int i=2; i<n; i++) {
                                   int nowy = tab[i];
                                   tab[0] = nowy;
                                   int j = i-1;                                  
                              int poczatek;
                              int koniec;
                              int srodek;
                              int wstawiany = 0;
                              poczatek = 1;
                              koniec = j;
                              boolean znaleziono;
                              znaleziono = false;
                              do{
                               srodek = (poczatek + koniec) / 2;
                                     if(nowy==tab[srodek]){                                       
                                        wstawiany = nowy;                                        
                                        for(int k = j; k > srodek; k--){
                                            tab[k+1] = tab[k];                                          
                                        }
                                        tab[j] = wstawiany;                                      
                                        znaleziono = true;
                                     }
                                      else{
                                           if(tab[i]<tab[srodek]){
                                              koniec = srodek - 1;                                            
                                           }
                                           else{
                                              poczatek = srodek + 1;                                             
                                           }
                                      }
                                      if(poczatek>koniec){
                                         wstawiany = nowy;                                       
                                         for(int k=j ; k >= poczatek; k--){                                          
                                            tab[k+1] = tab[k];                                           
                                        }                                        
                                         tab[j] = wstawiany;                                       
                                         znaleziono = true;
                                      }
                              }
                              while((!znaleziono)&&(poczatek<=koniec));
                            
                              tab[j+1] = nowy;
                          }
            }