user: Converte this assembly snippet into its equivalent C code:

```asm
<qsort_arr>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x28,%rsp
  mov    %edx,0x14(%rsp)
  mov    %ecx,0xc(%rsp)
  cmp    %ecx,%edx
  jge    L201
  mov    %rdi,%rbp
  mov    %rsi,%r15
L426:
  mov    0xc(%rsp),%ebx
  mov    0x14(%rsp),%r14d
  mov    %r15,%rsi
  mov    %rbp,%rdi
  mov    %ebx,%r8d
  mov    %ebx,%ecx
  mov    %r14d,%edx
  sub    %r14d,%r8d
  sar    %r8d
  add    %r14d,%r8d
  call   <partition@plt>
  lea    -0x1(%rax),%esi
  lea    0x1(%rax),%edi
  mov    %ebx,%eax
  mov    %esi,0x18(%rsp)
  sub    %edi,%eax
  sub    %r14d,%esi
  mov    %edi,0x10(%rsp)
  cmp    %eax,%esi
  jl     L34
  cmp    %ebx,%edi
  jge    L527
L423:
  mov    0xc(%rsp),%ebx
  mov    0x10(%rsp),%r14d
  mov    %r15,%rsi
  mov    %rbp,%rdi
  mov    %ebx,%r8d
  mov    %ebx,%ecx
  mov    %r14d,%edx
  sub    %r14d,%r8d
  sar    %r8d
  add    %r14d,%r8d
  call   <partition@plt>
  lea    -0x1(%rax),%ecx
  lea    0x1(%rax),%r12d
  mov    %ebx,%eax
  mov    %ecx,0x8(%rsp)
  sub    %r12d,%eax
  sub    %r14d,%ecx
  cmp    %eax,%ecx
  jl     L194
  mov    0xc(%rsp),%r14d
  cmp    %ebx,%r12d
  jge    L546
L318:
  mov    %r14d,%r8d
  mov    %rbp,%rdi
  mov    %r14d,%ecx
  mov    %r12d,%edx
  sub    %r12d,%r8d
  mov    %r15,%rsi
  sar    %r8d
  add    %r12d,%r8d
  call   <partition@plt>
  lea    -0x1(%rax),%edi
  lea    0x1(%rax),%r13d
  mov    %r14d,%eax
  mov    %edi,(%rsp)
  sub    %r13d,%eax
  sub    %r12d,%edi
  cmp    %eax,%edi
  jl     L453
  cmp    %r14d,%r13d
  jge    L85
  mov    %r12d,0xc(%rsp)
  mov    %r13d,%ebx
L23:
  mov    %r14d,%r8d
  mov    %ebx,%edx
  mov    %r14d,%ecx
  mov    %r15,%rsi
  sub    %ebx,%r8d
  mov    %rbp,%rdi
  sar    %r8d
  add    %ebx,%r8d
  call   <partition@plt>
  lea    -0x1(%rax),%r12d
  lea    0x1(%rax),%r13d
  mov    %r14d,%eax
  mov    %r12d,%edx
  sub    %r13d,%eax
  sub    %ebx,%edx
  cmp    %eax,%edx
  jl     L26
  cmp    %r14d,%r13d
  jge    L204
  mov    %r12d,0x4(%rsp)
  mov    %r14d,%r12d
L821:
  mov    %r12d,%r8d
  mov    %r13d,%edx
  mov    %r12d,%ecx
  mov    %r15,%rsi
  sub    %r13d,%r8d
  mov    %rbp,%rdi
  mov    %r13d,%r14d
  sar    %r8d
  add    %r13d,%r8d
  call   <partition@plt>
  lea    -0x1(%rax),%r8d
  lea    0x1(%rax),%r13d
  mov    %r12d,%eax
  mov    %r8d,%edx
  sub    %r13d,%eax
  sub    %r14d,%edx
  cmp    %eax,%edx
  jl     L195
  mov    %r12d,%ecx
  mov    %r13d,%edx
  mov    %r15,%rsi
  mov    %rbp,%rdi
  mov    %r8d,0x1c(%rsp)
  call   <qsort_arr>
  mov    0x1c(%rsp),%r8d
  cmp    %r14d,%r8d
  jle    L306
  mov    %r8d,%r12d
  mov    %r14d,%r13d
  jmp    L821
  nopl   0x0(%rax)
L195:
  mov    %r8d,%ecx
  mov    %r14d,%edx
  mov    %r15,%rsi
  mov    %rbp,%rdi
  call   <qsort_arr>
  cmp    %r12d,%r13d
  jl     L821
L306:
  mov    0x4(%rsp),%r12d
L204:
  mov    %r12d,%r14d
L251:
  cmp    %r14d,%ebx
  jl     L23
  mov    0xc(%rsp),%r12d
L85:
  mov    (%rsp),%r14d
L465:
  cmp    %r14d,%r12d
  jl     L318
L546:
  mov    0x8(%rsp),%eax
  mov    %eax,0xc(%rsp)
L597:
  mov    0xc(%rsp),%edi
  cmp    %edi,0x10(%rsp)
  jl     L423
L527:
  mov    0x18(%rsp),%eax
  mov    %eax,0xc(%rsp)
L382:
  mov    0xc(%rsp),%ebx
  cmp    %ebx,0x14(%rsp)
  jl     L426
L201:
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L26:
  cmp    %ebx,%r12d
  jle    L760
  mov    %r13d,%eax
  mov    %r14d,0x4(%rsp)
  mov    %ebx,%r13d
  mov    %r12d,%r14d
  mov    %eax,%ebx
L409:
  mov    %r14d,%r8d
  mov    %r13d,%edx
  mov    %r14d,%ecx
  mov    %r15,%rsi
  sub    %r13d,%r8d
  mov    %rbp,%rdi
  sar    %r8d
  add    %r13d,%r8d
  call   <partition@plt>
  lea    -0x1(%rax),%r8d
  lea    0x1(%rax),%r12d
  mov    %r14d,%eax
  mov    %r8d,%edx
  sub    %r12d,%eax
  sub    %r13d,%edx
  cmp    %eax,%edx
  jl     L519
  mov    %r14d,%ecx
  mov    %r12d,%edx
  mov    %r15,%rsi
  mov    %rbp,%rdi
  mov    %r8d,0x1c(%rsp)
  call   <qsort_arr>
  mov    0x1c(%rsp),%r8d
  cmp    %r13d,%r8d
  jle    L157
  mov    %r8d,%r14d
  mov    %r13d,%r12d
  nopl   0x0(%rax)
L509:
  mov    %r12d,%r13d
  jmp    L409
  nopl   (%rax)
L519:
  mov    %r8d,%ecx
  mov    %r13d,%edx
  mov    %r15,%rsi
  mov    %rbp,%rdi
  call   <qsort_arr>
  cmp    %r14d,%r12d
  jl     L509
L157:
  mov    0x4(%rsp),%r14d
  mov    %ebx,%r13d
L760:
  mov    %r13d,%ebx
  jmp    L251
  cs nopw 0x0(%rax,%rax,1)
L453:
  mov    (%rsp),%eax
  cmp    %r12d,%eax
  jle    L233
  mov    %r13d,0x4(%rsp)
  mov    %r14d,0xc(%rsp)
  mov    %r12d,%r14d
  mov    %eax,%r12d
L786:
  mov    %r12d,%r8d
  mov    %r14d,%edx
  mov    %r12d,%ecx
  mov    %r15,%rsi
  sub    %r14d,%r8d
  mov    %rbp,%rdi
  sar    %r8d
  add    %r14d,%r8d
  call   <partition@plt>
  lea    -0x1(%rax),%r13d
  lea    0x1(%rax),%ebx
  mov    %r12d,%eax
  mov    %r13d,%edx
  sub    %ebx,%eax
  sub    %r14d,%edx
  cmp    %eax,%edx
  jl     L561
  cmp    %r12d,%ebx
  jge    L798
  mov    %r14d,(%rsp)
  mov    %ebx,%r14d
  mov    %r13d,%ebx
  mov    %r12d,%r13d
L780:
  mov    %r13d,%r8d
  mov    %r14d,%edx
  mov    %r13d,%ecx
  mov    %r15,%rsi
  sub    %r14d,%r8d
  mov    %rbp,%rdi
  sar    %r8d
  add    %r14d,%r8d
  call   <partition@plt>
  lea    -0x1(%rax),%r8d
  lea    0x1(%rax),%r12d
  mov    %r13d,%eax
  mov    %r8d,%edx
  sub    %r12d,%eax
  sub    %r14d,%edx
  cmp    %eax,%edx
  jl     L178
  mov    %r13d,%ecx
  mov    %r12d,%edx
  mov    %r15,%rsi
  mov    %rbp,%rdi
  mov    %r8d,0x1c(%rsp)
  call   <qsort_arr>
  mov    0x1c(%rsp),%r8d
  cmp    %r14d,%r8d
  jle    L830
  mov    %r8d,%r13d
  mov    %r14d,%r12d
  nopl   0x0(%rax)
L809:
  mov    %r12d,%r14d
  jmp    L780
  nopl   (%rax)
L178:
  mov    %r8d,%ecx
  mov    %r14d,%edx
  mov    %r15,%rsi
  mov    %rbp,%rdi
  call   <qsort_arr>
  cmp    %r13d,%r12d
  jl     L809
L830:
  mov    (%rsp),%r14d
  mov    %ebx,%r13d
L798:
  mov    %r13d,%r12d
L653:
  cmp    %r12d,%r14d
  jl     L786
  mov    0x4(%rsp),%r13d
  mov    0xc(%rsp),%r14d
  mov    %r13d,%r12d
  jmp    L465
  nopl   0x0(%rax,%rax,1)
L561:
  cmp    %r14d,%r13d
  jle    L336
  mov    %r12d,(%rsp)
  mov    %r13d,%r12d
L708:
  mov    %r12d,%r8d
  mov    %r14d,%edx
  mov    %r12d,%ecx
  mov    %r15,%rsi
  sub    %r14d,%r8d
  mov    %rbp,%rdi
  sar    %r8d
  add    %r14d,%r8d
  call   <partition@plt>
  lea    -0x1(%rax),%r8d
  lea    0x1(%rax),%r13d
  mov    %r12d,%eax
  mov    %r8d,%edx
  sub    %r13d,%eax
  sub    %r14d,%edx
  cmp    %eax,%edx
  jl     L622
  mov    %r12d,%ecx
  mov    %r13d,%edx
  mov    %r15,%rsi
  mov    %rbp,%rdi
  mov    %r8d,0x1c(%rsp)
  call   <qsort_arr>
  mov    0x1c(%rsp),%r8d
  cmp    %r14d,%r8d
  jle    L457
  mov    %r8d,%r12d
  mov    %r14d,%r13d
  nopl   0x0(%rax,%rax,1)
L602:
  mov    %r13d,%r14d
  jmp    L708
  nopl   (%rax)
L622:
  mov    %r8d,%ecx
  mov    %r14d,%edx
  mov    %r15,%rsi
  mov    %rbp,%rdi
  call   <qsort_arr>
  cmp    %r12d,%r13d
  jl     L602
L457:
  mov    (%rsp),%r12d
L336:
  mov    %ebx,%r14d
  jmp    L653
  nopw   0x0(%rax,%rax,1)
L194:
  mov    0x8(%rsp),%r14d
  mov    0x10(%rsp),%ebx
  cmp    %ebx,%r14d
  jle    L814
  mov    %r12d,0x4(%rsp)
L135:
  mov    %r14d,%r8d
  mov    %ebx,%edx
  mov    %r14d,%ecx
  mov    %r15,%rsi
  sub    %ebx,%r8d
  mov    %rbp,%rdi
  sar    %r8d
  add    %ebx,%r8d
  call   <partition@plt>
  lea    -0x1(%rax),%r12d
  lea    0x1(%rax),%r13d
  mov    %r14d,%eax
  mov    %r12d,%edx
  sub    %r13d,%eax
  sub    %ebx,%edx
  cmp    %eax,%edx
  jl     L614
  cmp    %r14d,%r13d
  jge    L123
L245:
  mov    %r14d,%r8d
  mov    %r13d,%edx
  mov    %r14d,%ecx
  mov    %r15,%rsi
  sub    %r13d,%r8d
  mov    %rbp,%rdi
  sar    %r8d
  add    %r13d,%r8d
  call   <partition@plt>
  lea    -0x1(%rax),%r10d
  lea    0x1(%rax),%r8d
  mov    %r14d,%eax
  mov    %r10d,%edx
  sub    %r8d,%eax
  sub    %r13d,%edx
  cmp    %eax,%edx
  jl     L51
  mov    %r14d,%ecx
  mov    %r8d,%edx
  mov    %r15,%rsi
  mov    %rbp,%rdi
  mov    %r10d,(%rsp)
  call   <qsort_arr>
  mov    (%rsp),%r10d
  cmp    %r13d,%r10d
  jle    L123
  mov    %r10d,%r14d
  mov    %r13d,%r8d
L642:
  mov    %r8d,%r13d
  jmp    L245
  nopl   (%rax)
L51:
  mov    %r10d,%ecx
  mov    %r13d,%edx
  mov    %r15,%rsi
  mov    %rbp,%rdi
  mov    %r8d,(%rsp)
  call   <qsort_arr>
  mov    (%rsp),%r8d
  cmp    %r14d,%r8d
  jl     L642
L123:
  mov    %r12d,%r14d
L45:
  cmp    %r14d,%ebx
  jl     L135
  mov    0x4(%rsp),%r12d
  mov    %r12d,0x10(%rsp)
  jmp    L597
  nopl   0x0(%rax)
L614:
  cmp    %ebx,%r12d
  jle    L715
L141:
  mov    %r12d,%r8d
  mov    %ebx,%edx
  mov    %r12d,%ecx
  mov    %r15,%rsi
  sub    %ebx,%r8d
  mov    %rbp,%rdi
  sar    %r8d
  add    %ebx,%r8d
  call   <partition@plt>
  lea    -0x1(%rax),%r10d
  lea    0x1(%rax),%r8d
  mov    %r12d,%eax
  mov    %r10d,%edx
  sub    %r8d,%eax
  sub    %ebx,%edx
  cmp    %eax,%edx
  jl     L771
  mov    %r12d,%ecx
  mov    %r8d,%edx
  mov    %r15,%rsi
  mov    %rbp,%rdi
  mov    %r10d,(%rsp)
  call   <qsort_arr>
  mov    (%rsp),%r10d
  cmp    %ebx,%r10d
  jle    L715
  mov    %r10d,%r12d
  mov    %ebx,%r8d
  nopl   0x0(%rax,%rax,1)
L473:
  mov    %r8d,%ebx
  jmp    L141
  nopl   (%rax)
L771:
  mov    %r10d,%ecx
  mov    %ebx,%edx
  mov    %r15,%rsi
  mov    %rbp,%rdi
  mov    %r8d,(%rsp)
  call   <qsort_arr>
  mov    (%rsp),%r8d
  cmp    %r12d,%r8d
  jl     L473
L715:
  mov    %r13d,%ebx
  jmp    L45
  nopl   (%rax)
L34:
  mov    0x18(%rsp),%eax
  mov    0x14(%rsp),%r13d
  cmp    %r13d,%eax
  jle    L601
  mov    %eax,%r14d
L772:
  mov    %r14d,%r8d
  mov    %r13d,%edx
  mov    %r14d,%ecx
  mov    %r15,%rsi
  sub    %r13d,%r8d
  mov    %rbp,%rdi
  sar    %r8d
  add    %r13d,%r8d
  call   <partition@plt>
  lea    -0x1(%rax),%ebx
  lea    0x1(%rax),%r12d
  mov    %r14d,%eax
  mov    %ebx,%edx
  sub    %r12d,%eax
  sub    %r13d,%edx
  cmp    %eax,%edx
  jge    L320
  cmp    %r13d,%ebx
  jle    L714
L205:
  mov    %ebx,%r8d
  mov    %ebx,%ecx
  mov    %r13d,%edx
  mov    %r15,%rsi
  sub    %r13d,%r8d
  mov    %rbp,%rdi
  sar    %r8d
  add    %r13d,%r8d
  call   <partition@plt>
  lea    -0x1(%rax),%ecx
  lea    0x1(%rax),%r9d
  mov    %ebx,%eax
  mov    %ecx,(%rsp)
  sub    %r9d,%eax
  sub    %r13d,%ecx
  cmp    %eax,%ecx
  jl     L637
  cmp    %ebx,%r9d
  jge    L98
L234:
  mov    %ebx,%r8d
  mov    %r9d,%edx
  mov    %ebx,%ecx
  mov    %r15,%rsi
  sub    %r9d,%r8d
  mov    %rbp,%rdi
  mov    %r9d,0x4(%rsp)
  sar    %r8d
  add    %r9d,%r8d
  call   <partition@plt>
  mov    0x4(%rsp),%r9d
  lea    -0x1(%rax),%r10d
  lea    0x1(%rax),%r8d
  mov    %ebx,%eax
  mov    %r10d,%edx
  sub    %r8d,%eax
  sub    %r9d,%edx
  cmp    %eax,%edx
  jl     L745
  mov    %ebx,%ecx
  mov    %r8d,%edx
  mov    %r15,%rsi
  mov    %rbp,%rdi
  mov    %r10d,0x8(%rsp)
  mov    %r9d,0x4(%rsp)
  call   <qsort_arr>
  mov    0x4(%rsp),%r9d
  mov    0x8(%rsp),%r10d
  cmp    %r9d,%r10d
  jle    L98
  mov    %r10d,%ebx
  mov    %r9d,%r8d
  nopl   0x0(%rax,%rax,1)
L267:
  mov    %r8d,%r9d
  jmp    L234
  nopl   0x0(%rax,%rax,1)
L684:
  mov    %r10d,%ecx
  mov    %r12d,%edx
  mov    %r15,%rsi
  mov    %rbp,%rdi
  mov    %r8d,0x8(%rsp)
  call   <qsort_arr>
  mov    0x8(%rsp),%r8d
  cmp    (%rsp),%r8d
  mov    0x4(%rsp),%r9d
  jl     L326
L190:
  mov    %r9d,%r12d
L320:
  cmp    %r14d,%r12d
  jge    L535
L44:
  mov    %r14d,%r8d
  mov    %r15,%rsi
  mov    %r14d,%ecx
  mov    %r12d,%edx
  sub    %r12d,%r8d
  mov    %rbp,%rdi
  sar    %r8d
  add    %r12d,%r8d
  call   <partition@plt>
  lea    -0x1(%rax),%esi
  lea    0x1(%rax),%r9d
  mov    %r14d,%eax
  mov    %esi,(%rsp)
  sub    %r9d,%eax
  sub    %r12d,%esi
  cmp    %eax,%esi
  jl     L384
  cmp    %r14d,%r9d
  jge    L280
L618:
  mov    %r14d,%r8d
  mov    %r9d,%edx
  mov    %r14d,%ecx
  mov    %r15,%rsi
  sub    %r9d,%r8d
  mov    %rbp,%rdi
  mov    %r9d,0x4(%rsp)
  sar    %r8d
  add    %r9d,%r8d
  call   <partition@plt>
  mov    0x4(%rsp),%r9d
  lea    -0x1(%rax),%r10d
  lea    0x1(%rax),%r8d
  mov    %r14d,%eax
  mov    %r10d,%edx
  sub    %r8d,%eax
  sub    %r9d,%edx
  cmp    %eax,%edx
  jl     L259
  mov    %r14d,%ecx
  mov    %r8d,%edx
  mov    %r15,%rsi
  mov    %rbp,%rdi
  mov    %r10d,0x8(%rsp)
  mov    %r9d,0x4(%rsp)
  call   <qsort_arr>
  mov    0x4(%rsp),%r9d
  mov    0x8(%rsp),%r10d
  cmp    %r9d,%r10d
  jle    L280
  mov    %r10d,%r14d
  mov    %r9d,%r8d
  xchg   %ax,%ax
L875:
  mov    %r8d,%r9d
  jmp    L618
  nopl   (%rax)
L745:
  mov    %r10d,%ecx
  mov    %r9d,%edx
  mov    %r15,%rsi
  mov    %rbp,%rdi
  mov    %r8d,0x4(%rsp)
  call   <qsort_arr>
  mov    0x4(%rsp),%r8d
  cmp    %ebx,%r8d
  jl     L267
L98:
  mov    (%rsp),%ebx
L634:
  cmp    %ebx,%r13d
  jl     L205
L714:
  mov    %r12d,%r13d
L863:
  cmp    %r14d,%r13d
  jl     L772
  mov    0x10(%rsp),%eax
  mov    %eax,0x14(%rsp)
  jmp    L382
  nopl   0x0(%rax)
L259:
  mov    %r10d,%ecx
  mov    %r9d,%edx
  mov    %r15,%rsi
  mov    %rbp,%rdi
  mov    %r8d,0x4(%rsp)
  call   <qsort_arr>
  mov    0x4(%rsp),%r8d
  cmp    %r14d,%r8d
  jl     L875
L280:
  mov    (%rsp),%r14d
  cmp    %r14d,%r12d
  jl     L44
L535:
  mov    %ebx,%r14d
  jmp    L863
  nopw   0x0(%rax,%rax,1)
L637:
  cmp    %r13d,(%rsp)
  jle    L497
L2:
  mov    (%rsp),%eax
  mov    %r13d,%edx
  mov    %r15,%rsi
  mov    %rbp,%rdi
  mov    %r9d,0x4(%rsp)
  mov    %eax,%r8d
  mov    %eax,%ecx
  sub    %r13d,%r8d
  sar    %r8d
  add    %r13d,%r8d
  call   <partition@plt>
  mov    0x4(%rsp),%r9d
  lea    -0x1(%rax),%r10d
  lea    0x1(%rax),%r8d
  mov    (%rsp),%eax
  mov    %r10d,%edx
  sub    %r13d,%edx
  sub    %r8d,%eax
  cmp    %eax,%edx
  jl     L494
  mov    (%rsp),%ecx
  mov    %r8d,%edx
  mov    %r15,%rsi
  mov    %rbp,%rdi
  mov    %r10d,0x8(%rsp)
  mov    %r9d,0x4(%rsp)
  call   <qsort_arr>
  mov    0x8(%rsp),%r10d
  mov    0x4(%rsp),%r9d
  cmp    %r13d,%r10d
  jle    L497
  mov    %r10d,(%rsp)
  mov    %r13d,%r8d
  nopl   0x0(%rax)
L360:
  mov    %r8d,%r13d
  jmp    L2
  nopl   (%rax)
L494:
  mov    %r10d,%ecx
  mov    %r13d,%edx
  mov    %r15,%rsi
  mov    %rbp,%rdi
  mov    %r8d,0x8(%rsp)
  call   <qsort_arr>
  mov    0x8(%rsp),%r8d
  cmp    (%rsp),%r8d
  mov    0x4(%rsp),%r9d
  jl     L360
L497:
  mov    %r9d,%r13d
  jmp    L634
  cs nopw 0x0(%rax,%rax,1)
L384:
  cmp    %r12d,(%rsp)
  jle    L190
L64:
  mov    (%rsp),%eax
  mov    %r12d,%edx
  mov    %r15,%rsi
  mov    %rbp,%rdi
  mov    %r9d,0x4(%rsp)
  mov    %eax,%r8d
  mov    %eax,%ecx
  sub    %r12d,%r8d
  sar    %r8d
  add    %r12d,%r8d
  call   <partition@plt>
  mov    0x4(%rsp),%r9d
  lea    -0x1(%rax),%r10d
  lea    0x1(%rax),%r8d
  mov    (%rsp),%eax
  mov    %r10d,%edx
  sub    %r12d,%edx
  sub    %r8d,%eax
  cmp    %eax,%edx
  jl     L684
  mov    (%rsp),%ecx
  mov    %r8d,%edx
  mov    %r15,%rsi
  mov    %rbp,%rdi
  mov    %r10d,0x8(%rsp)
  mov    %r9d,0x4(%rsp)
  call   <qsort_arr>
  mov    0x8(%rsp),%r10d
  mov    0x4(%rsp),%r9d
  cmp    %r12d,%r10d
  jle    L190
  mov    %r10d,(%rsp)
  mov    %r12d,%r8d
  nopl   0x0(%rax)
L326:
  mov    %r8d,%r12d
  jmp    L64
L233:
  mov    %r13d,%r12d
  jmp    L465
  nopl   0x0(%rax,%rax,1)
L814:
  mov    %r12d,0x10(%rsp)
  jmp    L597
L601:
  mov    %edi,0x14(%rsp)
  jmp    L382
```

assistant: ```c
void qsort_arr(char *a[], char *b[], int left, int right) {
  while (right > left) {
    int p = left + (right - left) / 2;
    p = partition(a, b, left, right, p);
    if ((p - 1) - left < right - (p + 1)) {
      qsort_arr(a, b, left, p - 1);
      left = p + 1;
    } else {
      qsort_arr(a, b, p + 1, right);
      right = p - 1;
    }
  }
}
```