Студия выдаёт следующий код...
Медленный вариант:
i = 0;
00000109 mov dword ptr [rsp+30h],0
p = a;
00000164 mov rax,qword ptr [rbp]
00000168 mov qword ptr [rbp+10h],rax
0000016c jmp 00000000000001CC
{
q = a;
0000016e mov rax,qword ptr [rbp]
00000172 mov qword ptr [rbp+18h],rax
00000176 jmp 00000000000001B4
{
if (*q < *p)
00000178 mov rcx,qword ptr [rbp+18h]
0000017c mov ecx,dword ptr [rcx]
0000017e mov rax,qword ptr [rbp+10h]
00000182 mov eax,dword ptr [rax]
00000184 cmp ecx,eax
00000186 jge 00000000000001A6
{
int t = *p;
00000188 mov rax,qword ptr [rbp+10h]
0000018c mov eax,dword ptr [rax]
0000018e mov dword ptr [rbp+24h],eax
*p = *q;
00000191 mov rcx,qword ptr [rbp+18h]
00000195 mov ecx,dword ptr [rcx]
00000197 mov rax,qword ptr [rbp+10h]
0000019b mov dword ptr [rax],ecx
*q = t;
0000019d mov rcx,qword ptr [rbp+18h]
000001a1 mov eax,dword ptr [rbp+24h]
000001a4 mov dword ptr [rcx],eax
}
q++;
000001a6 mov rax,qword ptr [rbp+18h]
000001aa add rax,4
000001b0 mov qword ptr [rbp+18h],rax
while (q < e)
000001b4 mov rax,qword ptr [rbp+8]
000001b8 cmp qword ptr [rbp+18h],rax
000001bc jb 0000000000000178
}
p++;
000001be mov rax,qword ptr [rbp+10h]
000001c2 add rax,4
000001c8 mov qword ptr [rbp+10h],rax
while (p < e)
000001cc mov rax,qword ptr [rbp+8]
000001d0 cmp qword ptr [rbp+10h],rax
000001d4 jb 000000000000016E
}
На 50% более быстрый вариант:
p = a;
00000111 mov rax,qword ptr [rsp+28h]
00000116 mov qword ptr [rsp+38h],rax
0000011b jmp 00000000000001AA
{
j = 0;
00000120 mov dword ptr [rsp+34h],0
int* q = a;
00000128 mov rax,qword ptr [rsp+28h]
0000012d mov qword ptr [rsp+40h],rax
00000132 jmp 0000000000000185
{
if (*q < *p)
00000134 mov rcx,qword ptr [rsp+40h]
00000139 mov ecx,dword ptr [rcx]
0000013b mov rax,qword ptr [rsp+38h]
00000140 mov eax,dword ptr [rax]
00000142 cmp ecx,eax
00000144 jge 000000000000016A
{
int t = *p;
00000146 mov rax,qword ptr [rsp+38h]
0000014b mov eax,dword ptr [rax]
0000014d mov dword ptr [rsp+48h],eax
*p = *q;
00000151 mov rcx,qword ptr [rsp+40h]
00000156 mov ecx,dword ptr [rcx]
00000158 mov rax,qword ptr [rsp+38h]
0000015d mov dword ptr [rax],ecx
*q = t;
0000015f mov rcx,qword ptr [rsp+40h]
00000164 mov eax,dword ptr [rsp+48h]
00000168 mov dword ptr [rcx],eax
}
j++;
0000016a mov eax,dword ptr [rsp+34h]
0000016e add eax,1
00000171 mov dword ptr [rsp+34h],eax
q++;
00000175 mov rax,qword ptr [rsp+40h]
0000017a add rax,4
00000180 mov qword ptr [rsp+40h],rax
while (j < n)
00000185 cmp dword ptr [rsp+34h],0FFFFh
0000018d jl 0000000000000134
}
i++;
0000018f mov eax,dword ptr [rsp+30h]
00000193 add eax,1
00000196 mov dword ptr [rsp+30h],eax
p++;
0000019a mov rax,qword ptr [rsp+38h]
0000019f add rax,4
000001a5 mov qword ptr [rsp+38h],rax
while (i < n)
000001aa cmp dword ptr [rsp+30h],0FFFFh
000001b2 jl 0000000000000120
000001b8 mov qword ptr [rsp+28h],0
}