Problem with debouncing one button to control various patterns for LED

i am facing problem in debounce the button when trying to changing pattern of LEDs when using Arduino UNO. when i tried to press the button, the LED still remain at the same patterns and didnt change into other. Below the code that i used to control the LED

int pinCount= 3;
int led[]= {7,9,11};


int del = 100;
int i = 0;
int buttonState = 0;

void setup()
{
  for(int j=0; j<pinCount; j++)
  {
  pinMode(led[j], OUTPUT);
  }

  pinMode(5, INPUT_PULLUP);
}


void loop(){
  buttonState= digitalRead(5);

    if(buttonState == LOW)
    {
      i++;
     delay(1000);
    }

    if(i == 1)
    {
      for(int j=0; j< pinCount; j++)
      {
      digitalWrite(led[j], HIGH);
      delay(del);
      digitalWrite(led[j], LOW);
      delay(del);
      }
      for(int j=pinCount; j>= 0; j--)
      {
      digitalWrite(led[j], HIGH);
      delay(del);
      digitalWrite(led[j], LOW);
      delay(del);
      }
      }
       
    
  if(i == 2)
  {
    for(int j=0; j<= pinCount; j++)
    {
    digitalWrite(led[j], HIGH);
    }
    delay(1000);
    for(int j=pinCount; j>=0; j--)
    {
  digitalWrite(led[j], LOW);
    }
  delay(1000);
 
  }
  if(i == 3)
  {
    for(int j=0; j<= pinCount; j++)
    {
    digitalWrite(led[j], HIGH);
  }
  }
   
}

i am facing problem in debounce the button when trying to changing pattern of LEDs

No your not. Bouncing is where the contacts make and break very rapidly, making it look to the program like multiple key presses.

You are suffering from using too many delays, the button has to be held down until the program gets round to looking at the reading of the button. This can appear like the button is not working and not changing anything.

You need to write your code as a state machine. We get this question almost every day. Look at the blink without delay example in the IDE. Or the many threads that cover this, like how to do several things at once.