From 9180586d50b0709788826b073d4002fb9d150688 Mon Sep 17 00:00:00 2001 From: Piotr Kozak Date: Wed, 16 Apr 2025 17:35:33 +0200 Subject: [PATCH] heapsort be sorting now --- heapsort | Bin 16000 -> 16064 bytes heapsort.c | 57 +++++++++++++++++++++-------------------------------- 2 files changed, 22 insertions(+), 35 deletions(-) diff --git a/heapsort b/heapsort index df90b1e0d494f705b1852329b46ea0a281e9fe31..625874016c0beeaf2b1f978051045d43d3e1958f 100755 GIT binary patch delta 1606 zcmZpuJy1JALhys20|N*^NCt+6iJJF0by+|{3=F!H1sU}@*DykOYc_i_>N6_(C_uPA z3J^Uo+65xa;Ierp(+}RjFrQx2Y<>m?$55Zn?~Wm%!5+ z4|w#JsIa`)@c;k+<{ykDZXVsNI{FL@yM!4S81{i|_2{+L;%8v+=;nAad-4MT$$F61 z<|6{pv5qm0v5s+vJ(6owSUfxbcpQAr^upx-|NowyM_pT=)Wvvo9yWaYT8v-bg@M7P zJ4J=1`6#1D^I;Z8%QtoQh6g-4@A-6of1w1m`L0Jd>pVRMhFvm9HgDjA*v$L?|9_v( z_b;~o`(OY6W$OR`|6MwtfdpKc7#Iu>>}LWws@HTr9|OaSL;wE&Z>~{cVW`tIyzSAe zJDrb#A#H+VcgS1@kIr{srG^JQnh!I+nDOubf6EvZmik8^qoV%(|8IEUCCI85asU4R zPt)UMKtOsfFiQ<^TF5hjGr(5Zhp;JA@AAw zr}JwX%(b2OI$!y8K7XMC3fR|-#qU8eWq8T(o8kY%AfGsfcy|5?4etEh{F?E_`v3p` zx8APP^GH7I*{jn6lJ5>>aO`GLG5qG!`P`%VEsJBPh)Uhj_Le+fngh9w{W|BnHQfBgTyfPsNw%BTPT*Dx?JxP1Qq{{RC6L(Av?|KCiWs-Udt z@bUkDHBfxGunPz((Z=k^r_juj$0y;)C*Z`#!N9-(QVX(w!l(cL1K?_1;A(4; z)PnqU17!32|NnzPdBurOppVIuPokGu!s zPr->#!U=4lBlqS&#hct*7lc4&F)%C;n%t#p$EdLRr0#PjBLk=?$QdB4#lXP8#K6ap zfF^DW6<;7U`H_Je(*>c)T83_nD<&5jx-=c;ar52~2zp z3Q!YZF`Wq#XW(Oi6`bHy!N9<98SEDc48Poms-GYL@e4Sv7#J9yfbIGVA}1d(W?>YX zypc(mQFHP^V{u7SCXoMm7#N^>Kw$#H)|)>X+cR=Hm1gFoc%&v4Ox8Em!(4u?-IL9zB q$S`hxWc`nkiGyYGBU>|03los#3=Dpg746J9+sq)mUy~P_%L4$J{J|&y delta 1554 zcmX?5+fX|}Lhyl*0|N*^NCpOniJJF0ds#q23=F-K1sU}@Ll_~vkj;jL1H&$11_p+GAUi#JZFTq=7(BW;Ud;Xf|NjoKSa*mD zM~a8G2-qP0*87YM3?9u#B%)&-V;o}-dnDJWuy}O-^{7Aioau$d|Ns9zIuEzLt&8{Q zJnCxrk?z!!O?eaydvv=ey2R9-a4J++bv2XnxCB{Mw_})Cp$0;ei(cAp5&>R9ITy z)>*h3KJn?*RX}$EgHyN2VuTAkn~yNQkOa9PM}@`3@@f5p*0&YL9?3_2dR3bFEtFTDv4ibKJ?u&_Ax7Zw!S z;Gmen%fOHZHV{h){QdvmGDn4_{t3u;F@He;`;zzH|Nk!%{{H_z`GcS$(_@{_y7M_FfcF}eE9!=3j+f~!>9lM0~i<>HhlX3KZSvT zq2TlX{|i7-KDk#xSySWF|Nm+ro(sEx07w@D1B1(_|NlWIfrM2+dk%1f20pZD7hHi`jlM4;q851V&Gz@19nk;A}J=w)bL{guTfkB9gpP@knVk69K z)5(QK;*0^47aEB(#!jBdB5s%iQpv!_Z~m61_l8J2?hZ)lg~iaPY{6E2o78Z z28N4ZyIz4vR%Rv!2BFCtnS>d|CVw;*msA4rnRpl&pn72b)Yzv6WV*pTS;@|flLM6a7#J9=CnwsOb2^(rbpM+C&|Dq>%QM1( diff --git a/heapsort.c b/heapsort.c index 16fd0c2..b022c67 100644 --- a/heapsort.c +++ b/heapsort.c @@ -2,17 +2,15 @@ #include void Heapify(int A[], int i, int heapsize) { - int left = 2 * i +1; - int right = (2 * i) + 2; + int left = 2 * i; + int right = 2 * i + 1; int largest = i; - if (left <= heapsize && A[left] > A[largest]) { + if (left < heapsize && A[left] > A[largest]) { largest = left; - } else { - largest = i; } - if (right <= heapsize && A[right] > A[largest]) { + if (right < heapsize && A[right] > A[largest]) { largest = right; } @@ -24,6 +22,22 @@ void Heapify(int A[], int i, int heapsize) { } } +void BuildHeap(int A[], int size) { + for (int i = size / 2 - 1; i >= 0; i--) { + Heapify(A, i, size); + } +} + +void HeapSort(int A[], int size) { + BuildHeap(A, size); + for (int i = size - 1; i > 0; i--) { + int temp = A[0]; + A[0] = A[i]; + A[i] = temp; + Heapify(A, 0, i); + } +} + int main() { int size; int res = scanf("%d", &size); @@ -31,6 +45,7 @@ int main() { fprintf(stderr, "Error reading size\n"); return 1; } + int *array = malloc(sizeof(int) * size); for (int i = 0; i < size; i++) { res = scanf("%d", &array[i]); @@ -41,35 +56,7 @@ int main() { } } - printf("pre heap:"); - for (int i = 0; i < size; i++) { - printf("%d ", array[i]); - } - - // Build the heap - for (int i = size / 2 - 1; i >= 0; i--) { - Heapify(array, i, size); - } - - printf("\npost heap:"); - for (int i = 0; i < size; i++) { - printf("%d ", array[i]); - } - - int heapsize = size; - for (int i = size - 1; i >= 0; i--) { - int temp = array[i]; - array[i] = array[1]; - array[1] = temp; - heapsize--; - Heapify(array, i, heapsize); - } - - printf("\npost sort:"); - - for (int i = 0; i < size; i++) { - printf("%d ", array[i]); - } + HeapSort(array, size); free(array); return 0;