From 5100529e0595e91ba9546022622bf0beb1fb8cb6 Mon Sep 17 00:00:00 2001 From: Max do Val Machado Date: Mon, 31 Aug 2020 23:01:26 -0300 Subject: [PATCH] mergesort --- fonte/U1 - Introdução/java/Log.class | Bin 0 -> 1207 bytes .../c/bolha.o | Bin 1696 -> 0 bytes .../c/heapsort.c | 1 - .../c/heapsort.h | 2 + .../c/mergesort.c | 41 +++++++++- .../c/mergesort.h | 4 + .../java/Bolha.class | Bin 474 -> 0 bytes .../java/Countingsort.class | Bin 744 -> 0 bytes .../java/Geracao.class | Bin 2444 -> 0 bytes .../java/Heapsort.class | Bin 1045 -> 0 bytes .../java/Insercao.class | Bin 476 -> 0 bytes .../java/Mergesort.class | Bin 357 -> 0 bytes .../java/Mergesort.java | 72 ++++++++++++++---- .../java/Principal.class | Bin 1258 -> 0 bytes .../java/Quicksort.class | Bin 624 -> 0 bytes .../java/Selecao.class | Bin 493 -> 0 bytes .../java/Shellsort.class | Bin 659 -> 0 bytes 17 files changed, 103 insertions(+), 17 deletions(-) create mode 100644 fonte/U1 - Introdução/java/Log.class delete mode 100644 fonte/U4 - Ordenação em memória principal/c/bolha.o delete mode 100644 fonte/U4 - Ordenação em memória principal/java/Bolha.class delete mode 100644 fonte/U4 - Ordenação em memória principal/java/Countingsort.class delete mode 100644 fonte/U4 - Ordenação em memória principal/java/Geracao.class delete mode 100644 fonte/U4 - Ordenação em memória principal/java/Heapsort.class delete mode 100644 fonte/U4 - Ordenação em memória principal/java/Insercao.class delete mode 100644 fonte/U4 - Ordenação em memória principal/java/Mergesort.class delete mode 100644 fonte/U4 - Ordenação em memória principal/java/Principal.class delete mode 100644 fonte/U4 - Ordenação em memória principal/java/Quicksort.class delete mode 100644 fonte/U4 - Ordenação em memória principal/java/Selecao.class delete mode 100644 fonte/U4 - Ordenação em memória principal/java/Shellsort.class diff --git a/fonte/U1 - Introdução/java/Log.class b/fonte/U1 - Introdução/java/Log.class new file mode 100644 index 0000000000000000000000000000000000000000..754ca6b2f8337f6be58d9cdf633830d1b434d7b0 GIT binary patch literal 1207 zcmaJ=OHUI~7(KV0c7~zQOQF7?I4Ein1)un+;DdxnQmsjirXenda)Tr7Ow*ZSFmdP3 zxYm^mW5QNls3FFMOZ*-F2wjM0rX)Zhw&}Uw{a*Jw=iaXWUHcB;5(*|dknO-e?9b5A zZ(;zs3(Q(z?R()PI@7wb=dbGOj zxB~m~bHyk2vOQk2-No^8&~)6zLRi>U4(#gE9lH_b>o}@oSimfMt!7otIAIH;=q-+g z#VMHR)Nw3@<2WH8Z+Twe2Ti+iM+J|)1wWlc-oQu-Co!tyR0^jtW?%@$_LF|<`OU3w9ZuI**-2Q~vXl`r`ao{tw_#`(IT2_0D0Yc%ey2G&R^^2f#M##eeWIztjqx9pWF3-UP*?3Qp6cj<*uWtqbY!>@e6IL|+;95h=#5V4!vt58VqU;y VT*N^f;J%OXgY+GWa4^Ed{{T_g7OVgO literal 0 HcmV?d00001 diff --git a/fonte/U4 - Ordenação em memória principal/c/bolha.o b/fonte/U4 - Ordenação em memória principal/c/bolha.o deleted file mode 100644 index 2c4735d19fc01be4f14995f4cd615c34194152ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1696 zcmbtTPiqrV5T8wI>z~v_>7h`Oy(lX7k?O&=f}{S0w_ zLNVU_3|{>Lp&qI?PvQrt5YdCuOOQaE*?q6stm{PwCNuMU^P72@dHYl;8aAkcFIScuB2`!0w?d=u(b2!O5ile+u^mw7^?e8b$5GI-BAV-rd(C} zk6owMmz=FWBww1t;jq*B@DB3X?6Q2WsJH5NOI~7^S$cjU-SWaq=Y0SsuuKZ|5NiHL z5n=#c!o(P6&?k`|-2`bPCCw$K4tH>Hrw}70c}qXa@zjf0c6u`Q1~UkV7Ml44{2WG| z#v?aEcM-Q4XT`nSk7E?YVe(JV!>9g&M_)MZO=X;N1jCbodwTyJu_P+ZF)U{gh{8c{ zR4W=Q`xZ+1!rJOep|qCE-BQ*|>np1Tr3BVPt;q|%;+A%E40V7@CXqRgd!yZrgjt(4 zThoDAw&~l7@JyqsG27U%f!)S7aDj1d0JyWY0qn`ia$;hR*5#C$|F%mInKk{>hPj(KKW|Kh;N|z61mV-ypQXjE# zfuH4g_@(W0Uf58Lpj^a&YW^#K0l8E&jT#iupWabWM1NtI@lg1|yxAx)BKJCC^mUBA zA&doIMn5QGegf0cp;lr3BJaN_61ffYZzCSHzt0i-Bd*|!{YCYrR!!bt=9a!4`i8@N h!os^l2s*s~1quSf%N-ym(2L^#;QZ=ArtgILzX7AdsEGgo diff --git a/fonte/U4 - Ordenação em memória principal/c/heapsort.c b/fonte/U4 - Ordenação em memória principal/c/heapsort.c index cc9a9f4..1a2c850 100644 --- a/fonte/U4 - Ordenação em memória principal/c/heapsort.c +++ b/fonte/U4 - Ordenação em memória principal/c/heapsort.c @@ -1,5 +1,4 @@ #include "heapsort.h" -#include "geracao.h" //============================================================================= void constroi(int *array, int tamHeap){ for(int i = tamHeap; i > 1 && array[i] > array[i/2]; i /= 2){ diff --git a/fonte/U4 - Ordenação em memória principal/c/heapsort.h b/fonte/U4 - Ordenação em memória principal/c/heapsort.h index 7ba67c8..e2057c0 100644 --- a/fonte/U4 - Ordenação em memória principal/c/heapsort.h +++ b/fonte/U4 - Ordenação em memória principal/c/heapsort.h @@ -1,6 +1,8 @@ #ifndef HEAPSORT_H #define HEAPSORT_H //============================================================================= +#include "geracao.h" +//============================================================================= void constroi(int *array, int tamHeap); //============================================================================= int getMaiorFilho(int *array, int i, int tamHeap); diff --git a/fonte/U4 - Ordenação em memória principal/c/mergesort.c b/fonte/U4 - Ordenação em memória principal/c/mergesort.c index 1f6f2b3..50ef40f 100644 --- a/fonte/U4 - Ordenação em memória principal/c/mergesort.c +++ b/fonte/U4 - Ordenação em memória principal/c/mergesort.c @@ -1,6 +1,45 @@ #include "mergesort.h" +#include //============================================================================= void mergesort(int *array, int n) { - array[0] = n; + mergesortRec(array, 0, n-1); +} +//============================================================================= +void mergesortRec(int *array, int esq, int dir){ + if (esq < dir){ + int meio = (esq + dir) / 2; + mergesortRec(array, esq, meio); + mergesortRec(array, meio + 1, dir); + intercalar(array, esq, meio, dir); + } +} +//============================================================================= +void intercalar(int* array, int esq, int meio, int dir){ + int n1, n2, i, j, k; + + //Definir tamanho dos dois subarrays + n1 = meio-esq+1; + n2 = dir - meio; + + int* a1 = (int*) malloc((n1+1) * sizeof(int)); + int* a2 = (int*) malloc((n2+1) * sizeof(int)); + + //Inicializar primeiro subarray + for(i = 0; i < n1; i++){ + a1[i] = array[esq+i]; + } + + //Inicializar segundo subarray + for(j = 0; j < n2; j++){ + a2[j] = array[meio+j+1]; + } + + //Sentinela no final dos dois arrays + a1[i] = a2[j] = 0x7FFFFFFF; + + //Intercalacao propriamente dita + for(i = j = 0, k = esq; k <= dir; k++){ + array[k] = (a1[i] <= a2[j]) ? a1[i++] : a2[j++]; + } } //============================================================================= diff --git a/fonte/U4 - Ordenação em memória principal/c/mergesort.h b/fonte/U4 - Ordenação em memória principal/c/mergesort.h index 8fa5c20..3f1b041 100644 --- a/fonte/U4 - Ordenação em memória principal/c/mergesort.h +++ b/fonte/U4 - Ordenação em memória principal/c/mergesort.h @@ -5,4 +5,8 @@ //============================================================================= void mergesort(int *array, int n); //============================================================================= +void mergesortRec(int *array, int esq, int dir); +//============================================================================= +void intercalar(int* array, int esq, int meio, int dir); +//============================================================================= #endif diff --git a/fonte/U4 - Ordenação em memória principal/java/Bolha.class b/fonte/U4 - Ordenação em memória principal/java/Bolha.class deleted file mode 100644 index ba2338d6e22ed1fe6311094117b816254a0c83b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 474 zcmZ9J&q@MO6vn?Zf1Di0OiTMSqm>cZ1V*b`Sc`%}s5VBMHeGd~DRX4hqE#E8qeTR+ zgGgx61GMb{dXJFo%n&VtxxahvcRtSjF7y8V`UYSFIUO330a8&!Fd1M0ZH2$iy5Q2FC9iEzZk4++sm AcmMzZ diff --git a/fonte/U4 - Ordenação em memória principal/java/Countingsort.class b/fonte/U4 - Ordenação em memória principal/java/Countingsort.class deleted file mode 100644 index ccd7c4f527fbf0cbb2267191ad970c31585d62f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 744 zcmZ8eO=}ZT6g@BVlIct*rj2ddCK*49kT_EZU5PXeLP04sc2TJdyXZ6-!uXMqF%jGs z|AY%An{M0)VnIrOfPcZQ8=*UQr8b^76RXI~oICH{bHC2}diLcAz-?SMp<_nDtce^- z24POYyp9DOWr18H?1lZNfL6c0B_LO$P9RWN4|~Cb!Smf9e(3K$qes@)lK9Ig?hE8M z`+oar%YTtXbyNfQ%>LxZ*rOS8mM4}11_VEyU9?K(0;)XV*Z3TAy7;bFa8G8 C3xa|G diff --git a/fonte/U4 - Ordenação em memória principal/java/Geracao.class b/fonte/U4 - Ordenação em memória principal/java/Geracao.class deleted file mode 100644 index ee6c1c938dc0ebfa0962f3fa08dc1841c6fa6fe3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2444 zcmaJ?&vO(-7=5$5$z&%32^$hH8^|IFCL7#E@CT3tl<+H%urY}s1eDIskW8{WlbV?T z(W4wit@2{&Ef>owJ!nawz~bV~|G|@1;lc6`phSJ$v)L>pa!B`f_xHW`z1Lq)e);GA zLjZ4J&Oj^nC9xH+$YH;Z0|pY-@pI{Q_Os;0mtNGC{Nr3d;J8kBL_@r%_q>M0kZ0K%nnoPg zKDSt&w*5&lUE)rnXIP#mi@qHcZ8zlBrioA#=SRgtC8W`^Yfh7*WQ)-A9gmSr@P#GD zgyjpa^~#zx^-L*Tz3c@H@ktci5DW5PSRKS&?}jRl0t_c8_?GPoix{l;l8pBJkS7z~ zqF=O6Iw23xsGqD{nXlRzZ`NhyF<;R6 ztEHEOJCiR=&)G!^*IoN&IPCHl{or**d@5vAgtOch(?N85JWY%)4HuZ?+rm;wkr^s{ zVkrpiG84Q-qP32w!W}O^<~wdU5i+IRuc2jwZC=)b3}RMKlokPo+??s}J#XMD1kKSh z8n%_iyglT(MG;=N6xu1D*Y7;UmOHVmDy!%3%X>zJ1I zU(?W~%2nk!?sae8&Ql4iiYhoMifqs&9rUSw#PjAC*?8u#>)QTMWWR+P>qS%DZ5rP72G+Wk5l4c+VXZB(0vozIU$ zhF_ajen?{c(D147S3O^H1e4I~l!o1OVs)win(JWfhkUuP9~n*x?3 z2`gZ2&&l7(ijmxvn{ZHdd2Vbn>Tf~nOKl=cQi+52s5+Ce{1hh+@j=mMt--Es- z{>MV$R*X`9U!!V69WxK2fwz%DKX!BO#h{`y5qkndM}mr^RlBQ<*D6-^W$&SZcO@?^ zu6(abOiAiAk0W(|u2Ht5o|MO-;{@G1MbOje;+(~qHI*&oY$InE?Txy{UR9axlkHJM zxvExCcJy`RB9-eXM@f8+|HcaJ!7-{SQ0e#@WvW8CM~RgUI!Bq(*!&Mjri>Ld(%AGe z+PPH5=I*l}!F}cGBN?@61)HChdWr5{MiZ`(>oQyBDsm8OyasvYh3=`^>sA`(K$Um3 zBh%cG%^6FRyD8$9&H3B^anF)_jyF3`C+BFf%U1H9=I$i-OYGpt=A-16&#l68M3F^m z3u@X?kosz0=1pGZ65r(q^z}oY^pYn6+s(e$7~S{)&FsuAD@c7;O|Dl*A93u%-bzBb za>;uW1BumZ-4(H`F=6GFVen^sFg~DM|26$B5uO`uwB}37e=#%`1 z36S)~7ZZiV5I?{V@X-%2G4a_{>pDY86Vr6fIeM)>->U z%hesP=yI3SV{@*vrAB9;Ixn0kIuKRR6~!3FqnJQ4inD4tiBuFlD(gibNl(uSgl1jO zDLQ1();L~N_-8a6&vRZ;|Mp8~tHr*GVOn6)Fdzt_*oZN%Mi>R7VIM(!U?R{-G@%h= z(796WT}0JB%6(M{+KD4*|M&O7KtDUXPsa;`J39M!?T-lP>&NCoASYG6hn|eo*O}@v zdv8}0_2v&d^9j0fQr}0XEe~P%m0#*aPU;8fv30qtH4iC()lj|pQ%zW~Rl~8#do(M*>T^>DbCAL{1ipr^64Yc8qi2IMhbo^EuzQG8DMq*RG!+;XN)W0+%pXdN4lYAW!f1S79v;E|; ePHw#fiTg-mg^#rA6NV9x!3GTV{r3Ca1OEV&1g2&H diff --git a/fonte/U4 - Ordenação em memória principal/java/Insercao.class b/fonte/U4 - Ordenação em memória principal/java/Insercao.class deleted file mode 100644 index b1eaf605bf7ded7d4382c7f82421cdb3dc664950..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 476 zcmZ8eyG{a85IwVddAfk0fC@zL2^1t&Hi#xBkWEwyjE#*K*kXMwW&sm>KEck;m{6OT zkXUH%U-%amD$cHGVQ%i3xo1vh=H$M9Jv{^1#6l2WOgj(_z=N0rGd|4v5GQ!cre*dj z1T|kcB8c5i+aN^tOv^avUo;K-P&Ut*5qaIMcRO~E5Nh;f>ug_MPO8C1r*F56s_95W zy45x8mh6;H<(1UngWrKE4GAPQ%weA3|J4wDHN%#yCXmHfCwQc7%WHyitRu_Idf5h` zg0=872KbfZNE|)I5$J&vLXa^Cg)szyFf%-q(UC7P?^L|S)CkIdeS(K1S*iWCzu^vo z^)*pW6(6DAVVi?Um9|o%UCG=c=R7l|^gWVpCQg2c`am5I$8QrZT^|q)$1l!6#a(dC tU1yQ=ETZfpj%7Y8*uW}()jD>th$;$f0f<0+K%q~>h;r|)qp;g3@(o^|NWK67 diff --git a/fonte/U4 - Ordenação em memória principal/java/Mergesort.class b/fonte/U4 - Ordenação em memória principal/java/Mergesort.class deleted file mode 100644 index 59221240092e7c3c58c6ad4905950bf99b9c0bf1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 357 zcmZvWPfJ2U6vfYdfA!^`G89CJY7s9NZrengAQ8%q;(oLtUZf8u?R&WrTKEC{P|~?d z65%Y)y>riR&YjKndkx?Y=LrH-RZe4^#i$9Q`)roY9|V4SI}!ws`KuLFpR<|mFQ#Mb zhGzW1Ns#t-{%7vyg5uP=H@ok{w70X8LB4Pk`;;kOdHDr8@8-*t5F%13^6kMA#9iym z#N@by&tK^YAPQ4s-mX}MHEgdSOE!W6HGxMh5iWDWSgPXJoU0SHTPt|~`8vr4$>b2< dB&+d%qIENH!I%>+*vBg7AH!}4lxcXV`~X(+EgS#< diff --git a/fonte/U4 - Ordenação em memória principal/java/Mergesort.java b/fonte/U4 - Ordenação em memória principal/java/Mergesort.java index 2662cbb..2cea4fc 100644 --- a/fonte/U4 - Ordenação em memória principal/java/Mergesort.java +++ b/fonte/U4 - Ordenação em memória principal/java/Mergesort.java @@ -5,35 +5,77 @@ */ class Mergesort extends Geracao { - /** - * Construtor. - */ + /** + * Construtor. + */ public Mergesort(){ super(); } - /** - * Construtor. - * @param int tamanho do array de numeros inteiros. - */ + /** + * Construtor. + * @param int tamanho do array de numeros inteiros. + */ public Mergesort(int tamanho){ super(tamanho); } - /** - * Algoritmo de ordenacao Mergesort. - */ + /** + * Algoritmo de ordenacao Mergesort. + */ @Override public void sort() { + mergesort(0, n-1); } - /** - * Algoritmo de ordenacao Mergesort. + /** + * Algoritmo de ordenacao Mergesort. * @param int esq inicio do array a ser ordenado * @param int dir fim do array a ser ordenado - */ - private void mergesort(int esq, int dir) { - } + */ + private void mergesort(int esq, int dir) { + if (esq < dir){ + int meio = (esq + dir) / 2; + mergesort(esq, meio); + mergesort(meio + 1, dir); + intercalar(esq, meio, dir); + } + } + + /** + * Algoritmo que intercala os elementos entre as posicoes esq e dir + * @param int esq inicio do array a ser ordenado + * @param int meio posicao do meio do array a ser ordenado + * @param int dir fim do array a ser ordenado + */ + public void intercalar(int esq, int meio, int dir){ + int n1, n2, i, j, k; + + //Definir tamanho dos dois subarrays + n1 = meio-esq+1; + n2 = dir - meio; + + int[] a1 = new int[n1+1]; + int[] a2 = new int[n2+1]; + + //Inicializar primeiro subarray + for(i = 0; i < n1; i++){ + a1[i] = array[esq+i]; + } + + //Inicializar segundo subarray + for(j = 0; j < n2; j++){ + a2[j] = array[meio+j+1]; + } + + //Sentinela no final dos dois arrays + a1[i] = a2[j] = 0x7FFFFFFF; + + //Intercalacao propriamente dita + for(i = j = 0, k = esq; k <= dir; k++){ + array[k] = (a1[i] <= a2[j]) ? a1[i++] : a2[j++]; + } + } } diff --git a/fonte/U4 - Ordenação em memória principal/java/Principal.class b/fonte/U4 - Ordenação em memória principal/java/Principal.class deleted file mode 100644 index 2977650c2d524ac9a827e80becb7ef73b927e27a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1258 zcmaJ>%Tg0T6g{1gOfn9y@K(U6fJuO$_&^9C5?;aZutI5xt0w6R1C#00%z(u&xN)g# zH?DO77FO{Aeu-aUc{`y@C{oT;ci*{vPoI0bZ_lqk=NAB`@JdG;ZtA#&ehmXU{20`6 z8&TEWQQh4z?qMjn@Nt3Sfe5vjjyMu(ax?;laScfg6AZyw(>A?%27fI6nxQEz3xc6F zYuaM-sI(`X9lmFgr>VqEo1r`QE_=X_`Gm#o;zZ7KOuLv;z~-FC^M@O}d>OCjO=D))8v~edIwx}AjQXU?a8H|i=3ny)H*A*n{bNxA7 zu2HRlHEtIy;SN=Ssq4z?JXe4_CuPwfyuQ4vMUtx5cDY2FTUO5WL`uUp!|*kIjdEic z{C^yxXr+s-9v?NjBXm(a$Qq!L(HKaafqf%`p_BSx#Ti5xUFarTg?>T+8jU-Ni>5CK zxBGv8ML6M~`~lzGPx#;VpP?x`dWrzG;D>eUwTd+z_>NF-AYSZ5Sf1ksa0-K5G}(NP zmddAM_Enfih!YglLA?F+8;W8WBlIS4pRV*6mN1SSlIWqR0DQ(WRStS9@IGW|)G6I{ TY~m&Q2nr(b5u6cR^<#elJ^3;t diff --git a/fonte/U4 - Ordenação em memória principal/java/Quicksort.class b/fonte/U4 - Ordenação em memória principal/java/Quicksort.class deleted file mode 100644 index 0f06cdc52e9b500578a471cdae2875c0baaabd60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 624 zcmZ8d!D`e{6g@Y2Z{oyEJENvmleE^2Y19#_RFF~x!7`$vRNP3RuhW3Bb*82>ihIAL z3SA4*f(t=#<=P+759oMa9J^@XoqON8=iK{leja`O2H-a4e4N5L3t=4|rhLM*&Cc8G zf`^M9B0+7b=oN!yft$`h7pQyv&0H|~u;}HFhp#vC@|oG#CZp0$Rp0HG13~@Gu;_06 z%XQkRN{!Wl>25tTJ7b5x+8>tP{C;8W6Hose+ON!86QB;?LL)$oB)}w^0cJ28;1Zhb ze=HYxD|u6&5ZS$5@$<0;?a zqQ)sjv>Y!g8g(44>+SZUPD1q&OO{F6q25FNgDd-^Kb8m;nNMWYXn*wE3P-;(h6B_n zs@NYEsFr*>Xiv)%>jJSkR2V)M#1&P&Kz1A)Y z%pkWbu+|#YNHDNjt4G_XCkIiyqYjSQv4T=(-fF~cL9*Odm7^`y>`vWs<20^B>oraF z%F%IDQH}heI#V8c(5u1oFo8)AY4{#8$O@b;kJ&~PEA9|TovS3URUE4efw9NJYMrYl zdqIgFFhlzeZwHtVtxj}V%`yt39X>+tmRZ(+uNfPE>< zU-UUf$JYXtfob}gp|e@O%N%l;$0GA3Eb#NDQ9!^Mkb?aQL%uK|GVuZXoeKPfgc5PjpUZDO3Hg}9}x4YZ=gu^VV1fv-b<57!H@N4S?(N4A^LS;D~Ml0jTn^F28+#GO4_?^7JlcXa;sXGe$ zkM4y}4!Y%dxD%!QFu9+k?Ib1WekbQ!-DI5hqdT$ED0jD`!9Xe0ABImu8^=&oVB0ti zX`_NE8!kLT@sLR{??!3J(gYgv>acj2rr|S!w$Z^k9>(NZ0Rd8ij27?aITA-b*aN-g zgm9eEg2q^4a+xc9G^3&~a9wqbK<+_1%AbLbS!R|F<;N)S16&eKX>5yLQwHx*c$IyZ z#-Lfa?aEzL0#|;3c&^bT`zFQ9?5mR1avKYLG;o%8^O(YURIvz&CEhLK0(@LVjSYgA z*oQ`?edzR)nS3)jD$B2V2!rFgD|;|Oq zL2cF16>XAz`PXp7s^|7vlkDApuS+~MaG5{V74~@*bGU{84cz4atBo62;ocf<<$f#5 Uub^M364icSnhj6$%NkDn0W