常用排序算法
冒泡排序
1 // ConsoleApplication15.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include"stdlib.h" 6 7 #include"iostream" 8 using namespace std; 9 10 int _tmain(int argc, _TCHAR* argv[]) 11 { 12 int a[10]; 13 for (int i = 0; i < 10; i++) 14 { 15 a[i] = rand(); 16 cout << a[i] << endl; 17 } 18 cout << "**********" << endl; 19 20 for (int i = 0; i < 10; i++) 21 { 22 for (int j = 0; j < 9 - i; j++) 23 { 24 if (a[j]>a[j + 1]) 25 { 26 int temp; 27 temp = a[j]; 28 a[j] = a[j + 1]; 29 a[j + 1] = temp; 30 } 31 } 32 } 33 34 for (int i = 0; i < 10; i++) 35 cout << a[i] << endl; 36 return 0; 37 }
vs2013生成的反汇编代码:
#include "stdafx.h" #include"stdlib.h" #include"iostream" using namespace std; int _tmain(int argc, _TCHAR* argv[]) { 01025E80 push ebp 01025E81 mov ebp,esp 01025E83 sub esp,12Ch 01025E89 push ebx 01025E8A push esi 01025E8B push edi 01025E8C lea edi,[ebp-12Ch] 01025E92 mov ecx,4Bh 01025E97 mov eax,0CCCCCCCCh 01025E9C rep stos dword ptr es:[edi] int a[10]; for (int i = 0; i < 10; i++) 01025E9E mov dword ptr [ebp-38h],0 01025EA5 jmp wmain+30h (01025EB0h) 01025EA7 mov eax,dword ptr [ebp-38h] 01025EAA add eax,1 01025EAD mov dword ptr [ebp-38h],eax 01025EB0 cmp dword ptr [ebp-38h],0Ah 01025EB4 jge wmain+81h (01025F01h) { a[i] = rand(); 01025EB6 mov esi,esp 01025EB8 call dword ptr ds:[10311D0h] 01025EBE cmp esi,esp 01025EC0 call __RTC_CheckEsp (0102133Eh) 01025EC5 mov ecx,dword ptr [ebp-38h] 01025EC8 mov dword ptr a[ecx*4],eax cout << a[i] << endl; 01025ECC mov esi,esp 01025ECE push 10213E8h 01025ED3 mov edi,esp 01025ED5 mov eax,dword ptr [ebp-38h] 01025ED8 mov ecx,dword ptr a[eax*4] 01025EDC push ecx 01025EDD mov ecx,dword ptr ds:[10310A0h] 01025EE3 call dword ptr ds:[1031094h] 01025EE9 cmp edi,esp 01025EEB call __RTC_CheckEsp (0102133Eh) 01025EF0 mov ecx,eax 01025EF2 call dword ptr ds:[1031090h] 01025EF8 cmp esi,esp 01025EFA call __RTC_CheckEsp (0102133Eh) } 01025EFF jmp wmain+27h (01025EA7h) cout << "**********" << endl; 01025F01 mov esi,esp 01025F03 push 10213E8h 01025F08 push 102DC70h 01025F0D mov eax,dword ptr ds:[010310A0h] 01025F12 push eax 01025F13 call std::operator<<<std::char_traits<char> > (010212B2h) 01025F18 add esp,8 01025F1B mov ecx,eax 01025F1D call dword ptr ds:[1031090h] 01025F23 cmp esi,esp 01025F25 call __RTC_CheckEsp (0102133Eh) for (int i = 0; i < 10; i++) 01025F2A mov dword ptr [ebp-44h],0 01025F31 jmp wmain+0BCh (01025F3Ch) 01025F33 mov eax,dword ptr [ebp-44h] 01025F36 add eax,1 01025F39 mov dword ptr [ebp-44h],eax 01025F3C cmp dword ptr [ebp-44h],0Ah 01025F40 jge wmain+117h (01025F97h) { for (int j = 0; j < 9 - i; j++) 01025F42 mov dword ptr [ebp-50h],0 01025F49 jmp wmain+0D4h (01025F54h) 01025F4B mov eax,dword ptr [ebp-50h] 01025F4E add eax,1 01025F51 mov dword ptr [ebp-50h],eax 01025F54 mov eax,9 01025F59 sub eax,dword ptr [ebp-44h] 01025F5C cmp dword ptr [ebp-50h],eax 01025F5F jge wmain+115h (01025F95h) { if (a[j]>a[j + 1]) 01025F61 mov eax,dword ptr [ebp-50h] 01025F64 mov ecx,dword ptr [ebp-50h] 01025F67 mov edx,dword ptr a[eax*4] 01025F6B cmp edx,dword ptr [ebp+ecx*4-28h] 01025F6F jle wmain+113h (01025F93h) { int temp; temp = a[j]; 01025F71 mov eax,dword ptr [ebp-50h] 01025F74 mov ecx,dword ptr a[eax*4] 01025F78 mov dword ptr [ebp-5Ch],ecx a[j] = a[j + 1]; 01025F7B mov eax,dword ptr [ebp-50h] 01025F7E mov ecx,dword ptr [ebp-50h] 01025F81 mov edx,dword ptr [ebp+ecx*4-28h] 01025F85 mov dword ptr a[eax*4],edx a[j + 1] = temp; 01025F89 mov eax,dword ptr [ebp-50h] 01025F8C mov ecx,dword ptr [ebp-5Ch] 01025F8F mov dword ptr [ebp+eax*4-28h],ecx } } 01025F93 jmp wmain+0CBh (01025F4Bh) } 01025F95 jmp wmain+0B3h (01025F33h) for (int i = 0; i < 10; i++) 01025F97 mov dword ptr [ebp-68h],0 01025F9E jmp wmain+129h (01025FA9h) 01025FA0 mov eax,dword ptr [ebp-68h] 01025FA3 add eax,1 01025FA6 mov dword ptr [ebp-68h],eax 01025FA9 cmp dword ptr [ebp-68h],0Ah 01025FAD jge wmain+164h (01025FE4h) cout << a[i] << endl; 01025FAF mov esi,esp 01025FB1 push 10213E8h 01025FB6 mov edi,esp 01025FB8 mov eax,dword ptr [ebp-68h] 01025FBB mov ecx,dword ptr a[eax*4] 01025FBF push ecx 01025FC0 mov ecx,dword ptr ds:[10310A0h] 01025FC6 call dword ptr ds:[1031094h] 01025FCC cmp edi,esp 01025FCE call __RTC_CheckEsp (0102133Eh) 01025FD3 mov ecx,eax 01025FD5 call dword ptr ds:[1031090h] 01025FDB cmp esi,esp 01025FDD call __RTC_CheckEsp (0102133Eh) 01025FE2 jmp wmain+120h (01025FA0h) return 0; 01025FE4 xor eax,eax } 01025FE6 push edx 01025FE7 mov ecx,ebp 01025FE9 push eax 01025FEA lea edx,ds:[102600Ch] 01025FF0 call @_RTC_CheckStackVars@8 (01021131h) 01025FF5 pop eax 01025FF6 pop edx 01025FF7 pop edi 01025FF8 pop esi 01025FF9 pop ebx 01025FFA add esp,12Ch 01026000 cmp ebp,esp 01026002 call __RTC_CheckEsp (0102133Eh) 01026007 mov esp,ebp 01026009 pop ebp 0102600A ret 0102600B nop 0102600C add dword ptr [eax],eax 0102600E add byte ptr [eax],al 01026010 adc al,60h 01026012 add al,byte ptr [ecx] 01026014 aamb 0FFh 01026016 ?? ?? 01026017 jmp fword ptr [eax] 01026019 add byte ptr [eax],al 0102601B add byte ptr [eax],ah 0102601D pushad 0102601E add al,byte ptr [ecx] 01026020 popad 01026021 add ah,cl

浙公网安备 33010602011771号