From 0b2b2c82d185ec833949effbcffc639d24d6100d Mon Sep 17 00:00:00 2001 From: MAO Dongyang Date: Sat, 11 Mar 2023 17:12:47 +0100 Subject: [PATCH] TD2 speed fini --- TP2/tableau/main | Bin 49712 -> 50376 bytes TP2/tableau/main.c | 138 +++++++++++++++++++++++++++++++-------- file_operate/myls/main.c | 0 3 files changed, 110 insertions(+), 28 deletions(-) create mode 100644 file_operate/myls/main.c diff --git a/TP2/tableau/main b/TP2/tableau/main index 96ba5497f86f8b811bc69fdfbaf312c0077e220e..7e15e052b6b7ef6e93ab792e2f5de2993e879401 100755 GIT binary patch literal 50376 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 TjtDE_k8Mj8BFQ)DTB`J4UT8ec delta 1783 zcmZ8iZ)jUp6u<9J`ft*gw6)ZAb(O7bYU#2%oGx3ti4Wd}#nm=b3p1ukx`w7{nf!U4L(i}bqC$+gg;(8`I_AwKSENtub(ST0-W5pg@s zi*DY{)4Sqh-7S^@MSFpe-5?c^XFy`=XkP;S0Lc6eLQ;hGIGSs#0isWlPF1x!vS6sr z^*7S2W4Ci%|6t`x=&7Th2Y+fD|K^lV7adP?9?Dle?*czgIP@sID3=QJQ&oH1^Qo%u z9CYr?VOX9B&w|KYInmi!m!$=7wT?EURp5QKgl z7Dbf}MVm3cLWBM(EYj8W^eU%Mm&;`|0J#=T)6mdO;#-@mGScO78-TqRHz@pikHKWgzbt zp@5KgH3%T33!EzJ#cv@7IM~TaS20pMMCy{ZpM%4MWW9>|i;^z66?JA^O{}S2LzCB3 zxunSkoMqlsc^PzqY&&{ASkt_^e*YgUpiyZmXC^jcXa~T4pQ2pf)8lta=-lD^k0l zkOzxx6vseya)FdP<_;5BKV<92us%22b_K+dfpQ1_46~!Kkm9dEAI0()f5zQ5-2DK% zx_B%Rsv~tH{>U`Qj$k`j=zMQmJx-~80Puxbbf>o)KB{*7vVN2ve8Uu~UFBjr${!i2$M+K$Ed>G(LjJ2`J`| z24PP)AE^^a9!5v?(P%h6=pQDIzKQ5yEKCMZgks?l^0IGy)E7Dv3MAqo-)P8>F_N#0 z`@>N(%zQpGF%coBrV`=6*uX?AP9orMh6rTtESp9GDZB>AI1Nkcbxax`#$rUb- z9|S&A@Ych0vWFk)CHUsu2hCx)#lra>#7RPM3?pIAB5Y+CN0fP>i(x_v)}H~E8Ts~~ z0~D0u)FG39%sdAS^LgQac&HM~0A8(Bz#d0yExb6%FxyHDkhBw@U16VDVR~($t& #include #include +#include + +#define NBVAL 1E4 +#define MIN 0 +#define MAX 1E5 + +clock_t start, finish; +double duration; int *InitTab(unsigned int nbVal, int min, int max); bool Verif(int *t, unsigned int nbVal); -void MonTri(int *t, unsigned int nbVal); -void quickSort(int *t, int left, int right); +void bubbleSort(int *t, unsigned int nbVal, int (*compare)(int, int)); +void quickSort(int *t, unsigned int nbVal, int (*compare)(int, int)); +void _quickSort(int *t, int left, int right, int (*compare)(int, int)); +void sort(int *t, unsigned int nbVal, void (*sortMethod)(int *t, unsigned int nbVal, int (*compare)(int, int)), int (*compare)(int, int)) +{ + sortMethod(t, nbVal, compare); +} + +int min2max(int a, int b) +{ + return a - b; +} +int max2min(int a, int b) +{ + return b - a; +} +int pair(int a, int b) +{ + if (a % 2 == 0 && b % 2 != 0) + return -1; + if (a % 2 != 0 && b % 2 == 0) + return 1; + return a - b; +} // if true print "true" // if false print "false" @@ -21,13 +51,48 @@ void printBool(bool b) } } +int *duplicate(int *t, unsigned int nbVal) +{ + int *t2 = (int *)malloc(nbVal * sizeof(int)); + for (int i = 0; i < nbVal; i++) + { + t2[i] = t[i]; + } + return t2; +} + +void printMethod(void (*sortMethod)(int *t, unsigned int nbVal, int (*compare)(int, int))) +{ + if (sortMethod == bubbleSort) + { + printf("bubbleSort"); + } + else if (sortMethod == quickSort) + { + printf("quickSort"); + } +} + int main() { - int *t = InitTab(10, 0, 100); - printBool(Verif(t, 10)); - // MonTri(t, 10); - quickSort(t, 0, 9); - printBool(Verif(t, 10)); + void *sortMethodArray[2] = {bubbleSort, quickSort}; + + for (int i = 0; i < 2; i++) + { + srand(0); + int *t = InitTab(NBVAL, MIN, MAX); + printf("----------------------"); + printMethod(sortMethodArray[i]); + printf("---------------------\n"); + printBool(Verif(t, NBVAL)); + start = clock(); + sort(t, NBVAL, sortMethodArray[i], min2max); + finish = clock(); + printBool(Verif(t, NBVAL)); + duration = (double)(finish - start) / CLOCKS_PER_SEC; + printf("%f seconds\n", duration); + printf("----------------------------------------------------\n"); + } return 0; } @@ -55,45 +120,60 @@ bool Verif(int *t, unsigned int nbVal) } } - for (int i = 0; i < nbVal; i++) + // print array 10 head and 10 tail + for (int i = 0; i < 10; i++) { printf("%d ", t[i]); } + printf("....... "); + for (int i = nbVal - 10; i < nbVal; i++) + { + printf("%d ", t[i]); + } + return flg; } -void MonTri(int *t, unsigned int nbVal) +void bubbleSort(int *t, unsigned int nbVal, int (*compare)(int, int)) { - int i, j, tmp; - for (i = 0; i < nbVal; i++) + int tmp; + for (int i = 0; i < nbVal - 1; i++) { - for (j = i + 1; j < nbVal; j++) + for (int j = 0; j < nbVal - 1 - i; j++) { - if (t[i] > t[j]) + if (compare(t[j], t[j + 1]) > 0) { - tmp = t[i]; - t[i] = t[j]; - t[j] = tmp; + tmp = t[j]; + t[j] = t[j + 1]; + t[j + 1] = tmp; } } } } // quick sort -void quickSort(int *t, int left, int right) +void quickSort(int *t, unsigned int size, int (*compare)(int, int)) { - int i = left, j = right; + _quickSort(t, 0, size - 1, compare); +} + +void _quickSort(int *t, int left, int right, int (*compare)(int, int)) +{ + if (right - left < 1) + return; + + int i = left + 1, j = right; int tmp; - int pivot = t[(left + right) / 2]; + int pivot = t[left]; /* partition */ while (i <= j) { - while (t[i] < pivot) + if (compare(t[i], pivot) < 0) i++; - while (t[j] > pivot) + else if (compare(t[j], pivot) >= 0) j--; - if (i <= j) + else { tmp = t[i]; t[i] = t[j]; @@ -101,11 +181,13 @@ void quickSort(int *t, int left, int right) i++; j--; } - }; + } + tmp = t[left]; + t[left] = t[j]; + t[j] = tmp; /* recursion */ - if (left < j) - quickSort(t, left, j); - if (i < right) - quickSort(t, i, right); -} \ No newline at end of file + + _quickSort(t, left, j - 1, compare); + _quickSort(t, j + 1, right, compare); +} diff --git a/file_operate/myls/main.c b/file_operate/myls/main.c new file mode 100644 index 0000000..e69de29