title: R G B element array swap
body: <p>I'm trying to create this c++ program to perform the description below.  I am pretty certain the issue is in the recursive, but uncertain how to fix it.  I'm guessing it just keeps iterating through to infinity and crashes.  I do not even get an output.  I figured I could just compare the previous and current pointer and perform a 3-piece temp swap based on lexicography.  I would use a pointer to iterate through the array and decrement it after each swap, then recursively call with that ptr as the parameter.  Didn't work, I'm here, help me please :).  If there is a simpler solution that would work too, but prefer to understand where I went wrong with this code.</p>
  
  <pre><code>#include &lt;string&gt;
  #include &lt;iostream&gt;
  using namespace std;
  
  // Given an array of strictly the characters 'R', 'G', and
  // 'B', segregate the values of the array so that all the
  // Rs come first, the Gs come second, and the Bs come last.
  // You can only swap elements of the array.
  
  char* RGBorder(char* c_a)
  {
  
      size_t sz = sizeof(c_a)/sizeof(*c_a);
      char* ptr_ca = c_a;
      char* prv_ptr = ptr_ca;
      ptr_ca++;
      char temp;
  
      while(*ptr_ca)
      {
          switch(*ptr_ca)
          {
              case 'R' :
                  if( *prv_ptr &lt; *ptr_ca ) {
                      temp = *prv_ptr; *prv_ptr = *ptr_ca; *ptr_ca = temp;
                  } else if( *prv_ptr == *ptr_ca ) {
                      continue;
                  } else { ptr_ca--; RGBorder(ptr_ca); }
  
              case 'G' :
                  if( *prv_ptr &lt; *ptr_ca ) {
                      temp = *prv_ptr; *prv_ptr = *ptr_ca; *ptr_ca = temp;
                  } else if( *prv_ptr == *ptr_ca ) {
                      continue;
                  } else { ptr_ca--; RGBorder(ptr_ca); }
              default:
                  ptr_ca++;
                  continue;
          }
          ptr_ca++;
          cout &lt;&lt; *ptr_ca;
      }
  
      return c_a;
  }
  
  int main()
  {
      char ca[] =  {'G', 'B', 'R', 'R', 'B', 'R', 'G'};
      char *oca =RGBorder(ca);
      char *pca = oca;
      while(*pca)
      {
          cout &lt;&lt; *pca &lt;&lt; endl;
          pca++;
      }
  }
  </code></pre>