user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<quickSort>:
  endbr64
  cmp    %esi,%edi
  jge    L10
  push   %r15
  mov    %rdx,%r15
  push   %r14
  push   %r13
  push   %r12
  mov    %esi,%r12d
  push   %rbp
  mov    %edi,%ebp
  push   %rbx
  sub    $0x48,%rsp
L197:
  mov    %r12d,%edx
  mov    %ebp,%esi
  mov    %r15,%rdi
  call   <partition@plt>
  mov    %eax,%ebx
  test   %eax,%eax
  je     L532
  cmp    %r12d,%eax
  jne    L441
  sub    $0x1,%r12d
L259:
  cmp    %r12d,%ebp
  jl     L197
  add    $0x48,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopw   0x0(%rax,%rax,1)
L532:
  mov    $0x1,%ebp
  jmp    L259
  nop
L441:
  lea    -0x1(%rax),%r14d
  cmp    %ebp,%r14d
  jle    L72
  mov    %eax,0x8(%rsp)
  mov    %r12d,0xc(%rsp)
  mov    %ebp,%r12d
  mov    %r14d,%ebp
L394:
  mov    %ebp,%edx
  mov    %r12d,%esi
  mov    %r15,%rdi
  call   <partition@plt>
  mov    %eax,%ebx
  test   %eax,%eax
  je     L343
  cmp    %ebp,%eax
  jne    L536
  sub    $0x1,%ebp
L468:
  cmp    %ebp,%r12d
  jl     L394
  mov    0x8(%rsp),%ebx
  mov    0xc(%rsp),%r12d
L72:
  lea    0x1(%rbx),%ebp
  jmp    L259
  nopl   (%rax)
L343:
  mov    $0x1,%r12d
  jmp    L468
L536:
  lea    -0x1(%rax),%r14d
  cmp    %r12d,%r14d
  jle    L442
  mov    %eax,0x10(%rsp)
  mov    %ebp,0x14(%rsp)
  mov    %r12d,%ebp
  mov    %r14d,%r12d
L281:
  mov    %r12d,%edx
  mov    %ebp,%esi
  mov    %r15,%rdi
  call   <partition@plt>
  mov    %eax,%ebx
  test   %eax,%eax
  je     L58
  cmp    %r12d,%eax
  jne    L150
  sub    $0x1,%r12d
L273:
  cmp    %r12d,%ebp
  jl     L281
  mov    0x10(%rsp),%ebx
  mov    0x14(%rsp),%ebp
L442:
  lea    0x1(%rbx),%r12d
  jmp    L468
  cs nopw 0x0(%rax,%rax,1)
L58:
  mov    $0x1,%ebp
  jmp    L273
  nopw   0x0(%rax,%rax,1)
L150:
  lea    -0x1(%rax),%r14d
  cmp    %ebp,%r14d
  jle    L463
  mov    %eax,0x18(%rsp)
  mov    %r14d,%r13d
  mov    %r12d,0x1c(%rsp)
  mov    %ebp,%r12d
  mov    %r15,%rbp
L530:
  mov    %r13d,%edx
  mov    %r12d,%esi
  mov    %rbp,%rdi
  call   <partition@plt>
  mov    %eax,%ebx
  test   %eax,%eax
  je     L301
  cmp    %r13d,%eax
  jne    L496
  sub    $0x1,%r13d
L314:
  cmp    %r13d,%r12d
  jl     L530
  mov    0x18(%rsp),%ebx
  mov    0x1c(%rsp),%r12d
  mov    %rbp,%r15
L463:
  lea    0x1(%rbx),%ebp
  jmp    L273
  xchg   %ax,%ax
L301:
  mov    $0x1,%r12d
  jmp    L314
  nopl   0x0(%rax,%rax,1)
L496:
  lea    -0x1(%rax),%r15d
  cmp    %r12d,%r15d
  jle    L388
  mov    %eax,0x20(%rsp)
  mov    %r13d,0x24(%rsp)
  mov    %r12d,%r13d
L337:
  mov    %r15d,%edx
  mov    %r13d,%esi
  mov    %rbp,%rdi
  call   <partition@plt>
  mov    %eax,%ebx
  test   %eax,%eax
  je     L300
  cmp    %r15d,%eax
  jne    L434
  sub    $0x1,%r15d
L65:
  cmp    %r15d,%r13d
  jl     L337
  mov    0x20(%rsp),%ebx
  mov    0x24(%rsp),%r13d
L388:
  lea    0x1(%rbx),%r12d
  jmp    L314
  cs nopw 0x0(%rax,%rax,1)
L300:
  mov    $0x1,%r13d
  jmp    L65
  nopl   0x0(%rax,%rax,1)
L434:
  lea    -0x1(%rax),%r12d
  cmp    %r13d,%r12d
  jle    L360
  mov    %eax,0x28(%rsp)
  mov    %r13d,%r14d
  mov    %r15d,0x2c(%rsp)
L342:
  mov    %r12d,%edx
  mov    %r14d,%esi
  mov    %rbp,%rdi
  call   <partition@plt>
  mov    %eax,%ebx
  test   %eax,%eax
  je     L59
  cmp    %r12d,%eax
  jne    L503
  sub    $0x1,%r12d
L415:
  cmp    %r12d,%r14d
  jl     L342
  mov    0x28(%rsp),%ebx
  mov    0x2c(%rsp),%r15d
L360:
  lea    0x1(%rbx),%r13d
  jmp    L65
  cs nopw 0x0(%rax,%rax,1)
L59:
  mov    $0x1,%r14d
  jmp    L415
  nopl   0x0(%rax,%rax,1)
L503:
  lea    -0x1(%rax),%r15d
  cmp    %r14d,%r15d
  jle    L495
  mov    %eax,0x30(%rsp)
  mov    %r12d,0x34(%rsp)
  mov    %r14d,%r12d
L481:
  mov    %r15d,%edx
  mov    %r12d,%esi
  mov    %rbp,%rdi
  call   <partition@plt>
  mov    %eax,%r13d
  test   %eax,%eax
  je     L198
  cmp    %r15d,%eax
  jne    L366
  sub    $0x1,%r15d
L119:
  cmp    %r15d,%r12d
  jl     L481
  mov    0x30(%rsp),%ebx
  mov    0x34(%rsp),%r12d
L495:
  lea    0x1(%rbx),%r14d
  jmp    L415
  nopw   0x0(%rax,%rax,1)
L198:
  mov    $0x1,%r12d
  jmp    L119
  nopl   0x0(%rax,%rax,1)
L366:
  lea    -0x1(%rax),%r14d
  cmp    %r12d,%r14d
  jle    L291
  mov    %eax,0x38(%rsp)
L169:
  mov    %r14d,%edx
  mov    %r12d,%esi
  mov    %rbp,%rdi
  call   <partition@plt>
  mov    %eax,%ebx
  test   %eax,%eax
  je     L465
  cmp    %r14d,%eax
  jne    L409
  sub    $0x1,%r14d
L493:
  cmp    %r14d,%r12d
  jl     L169
  mov    0x38(%rsp),%r13d
L291:
  lea    0x1(%r13),%r12d
  jmp    L119
  nopw   0x0(%rax,%rax,1)
L465:
  mov    $0x1,%r12d
  jmp    L493
  nopl   0x0(%rax,%rax,1)
L409:
  lea    -0x1(%rax),%r13d
  cmp    %r12d,%r13d
  jle    L511
  mov    %eax,0x3c(%rsp)
  mov    %rbp,%rbx
  mov    %r12d,%ebp
L538:
  mov    %r13d,%edx
  mov    %ebp,%esi
  mov    %rbx,%rdi
  call   <partition@plt>
  mov    %eax,%r12d
  test   %eax,%eax
  je     L278
  cmp    %r13d,%eax
  jne    L499
  sub    $0x1,%r13d
L410:
  cmp    %r13d,%ebp
  jl     L538
  mov    %rbx,%rbp
  mov    0x3c(%rsp),%ebx
L511:
  lea    0x1(%rbx),%r12d
  jmp    L493
  nopw   0x0(%rax,%rax,1)
L278:
  mov    $0x1,%ebp
  jmp    L410
  nop
L499:
  mov    %ebp,%edi
  lea    -0x1(%rax),%esi
  lea    0x1(%r12),%ebp
  mov    %rbx,%rdx
  call   <quickSort>
  jmp    L410
  nopl   0x0(%rax)
L10:
  ret
```

assistant: ```c
void quickSort(int lo, int hi, unsigned long *arr) {
  int k;
  if (lo >= hi)
    return;
  k = partition(arr, lo, hi);
  if (k == 0) {
    quickSort(k + 1, hi, arr);
  } else if (k == hi) {
    quickSort(lo, k - 1, arr);
  } else {
    quickSort(lo, k - 1, arr);
    quickSort(k + 1, hi, arr);
  }
}
```