user: 提供的汇编代码用C语言表示会是什么样子：

```asm
<medianOfMedians>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %edx,-0x24(%rbp)
  mov    %ecx,-0x28(%rbp)
  mov    %r8d,-0x2c(%rbp)
  mov    -0x2c(%rbp),%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  mov    %eax,-0x8(%rbp)
  mov    -0x28(%rbp),%eax
  sub    -0x24(%rbp),%eax
  add    $0x1,%eax
  cltd
  idivl  -0x8(%rbp)
  mov    %eax,-0x4(%rbp)
  cmpl   $0x0,-0x4(%rbp)
  jne    L4
  mov    -0x2c(%rbp),%edi
  mov    -0x28(%rbp),%ecx
  mov    -0x24(%rbp),%edx
  mov    -0x20(%rbp),%rsi
  mov    -0x18(%rbp),%rax
  mov    %edi,%r8d
  mov    %rax,%rdi
  call   <_insertion@plt>
  mov    -0x28(%rbp),%eax
  sub    -0x24(%rbp),%eax
  add    $0x1,%eax
  cltd
  idivl  -0x2c(%rbp)
  mov    %eax,-0x4(%rbp)
  mov    -0x4(%rbp),%eax
  sub    $0x1,%eax
  imul   -0x2c(%rbp),%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,%edx
  mov    -0x24(%rbp),%eax
  add    %edx,%eax
  jmp    L47
L4:
  mov    -0x24(%rbp),%eax
  mov    %eax,-0xc(%rbp)
  jmp    L39
L22:
  mov    -0xc(%rbp),%edx
  mov    -0x8(%rbp),%eax
  add    %edx,%eax
  lea    -0x1(%rax),%ecx
  mov    -0x2c(%rbp),%edi
  mov    -0xc(%rbp),%edx
  mov    -0x20(%rbp),%rsi
  mov    -0x18(%rbp),%rax
  mov    %edi,%r8d
  mov    %rax,%rdi
  call   <_insertion@plt>
  mov    -0x8(%rbp),%eax
  add    %eax,-0xc(%rbp)
L39:
  mov    -0xc(%rbp),%edx
  mov    -0x8(%rbp),%eax
  add    %edx,%eax
  cmp    %eax,-0x28(%rbp)
  jg     L22
  cmpl   $0x4,-0x4(%rbp)
  jg     L57
  mov    -0x8(%rbp),%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,%edx
  mov    -0x24(%rbp),%eax
  lea    (%rdx,%rax,1),%edi
  mov    -0x8(%rbp),%ecx
  mov    -0x28(%rbp),%edx
  mov    -0x20(%rbp),%rsi
  mov    -0x18(%rbp),%rax
  mov    %ecx,%r8d
  mov    %edx,%ecx
  mov    %edi,%edx
  mov    %rax,%rdi
  call   <_insertion@plt>
  mov    -0x4(%rbp),%eax
  imul   -0x8(%rbp),%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,%edx
  mov    -0x24(%rbp),%eax
  add    %edx,%eax
  jmp    L47
L57:
  mov    -0x2c(%rbp),%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  lea    (%rax,%rdx,1),%edi
  mov    -0xc(%rbp),%eax
  lea    -0x1(%rax),%ecx
  mov    -0x8(%rbp),%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,%edx
  mov    -0x24(%rbp),%eax
  add    %eax,%edx
  mov    -0x20(%rbp),%rsi
  mov    -0x18(%rbp),%rax
  mov    %edi,%r8d
  mov    %rax,%rdi
  call   <medianOfMedians>
L47:
  leave
  ret
```

assistant: ```c
int medianOfMedians(void **ar, int (*cmp)(const void *, const void *), int left, int right, int gap) {
  int s, num;
  int span = 5 * gap;
  num = (right - left + 1) / span;
  if (num == 0) {
    _insertion(ar, cmp, left, right, gap);
    num = (right - left + 1) / gap;
    return left + gap * (num - 1) / 2;
  }
  for (s = left; s + span < right; s += span) {
    _insertion(ar, cmp, s, s + span - 1, gap);
  }
  if (num < 5) {
    _insertion(ar, cmp, left + span / 2, right, span);
    return left + num * span / 2;
  } else {
    return medianOfMedians(ar, cmp, left + span / 2, s - 1, 5 * gap);
  }
}
```