Commit b5022a60 authored by Antoine Sauray's avatar Antoine Sauray
Browse files

use of lambda functions

parent 57f5321b
#ifndef SORT_H #ifndef SORT_H
#define SORT_H #define SORT_H
void quicksort(int *tab, int debut, int fin, int order); #include <stdbool.h>
#include <stdio.h>
void quicksort(int *tab, int debut, int fin, bool (*f1Ptr)(int, int), bool (*f2Ptr)(int, int));
#endif #endif
\ No newline at end of file
...@@ -13,4 +13,10 @@ void init(int* array, int size); ...@@ -13,4 +13,10 @@ void init(int* array, int size);
bool isSorted(int* array, int size, int order); bool isSorted(int* array, int size, int order);
bool more(int a,int b);
bool less(int a,int b);
bool descending(int a, int b);
bool pair(int a, int b);
bool impair(int a, int b);
#endif #endif
\ No newline at end of file
...@@ -13,7 +13,14 @@ int main(){ ...@@ -13,7 +13,14 @@ int main(){
printf("array is not sorted\n"); printf("array is not sorted\n");
} }
printArray(rands, SIZE); printArray(rands, SIZE);
quicksort(rands, 0, SIZE, DESCENDING);
bool (*morePtr)(int,int);
morePtr = &more;
bool (*lessPtr)(int,int);
lessPtr = &less;
quicksort(rands, 0, SIZE, lessPtr, morePtr);
printArray(rands, SIZE); printArray(rands, SIZE);
return 0; return 0;
} }
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
#include "../include/sort.h" #include "../include/sort.h"
void quicksort(int *tab, int debut, int fin, int order){ void quicksort(int *tab, int debut, int fin, bool (*f1Ptr)(int, int), bool (*f2Ptr)(int, int)){
int temp; int temp;
int gauche = debut-1; int gauche = debut-1;
int droite = fin+1; int droite = fin+1;
...@@ -14,16 +14,9 @@ void quicksort(int *tab, int debut, int fin, int order){ ...@@ -14,16 +14,9 @@ void quicksort(int *tab, int debut, int fin, int order){
} }
while(1){ //while true while(1){ //while true
do droite--; while((*f1Ptr)(tab[droite], pivot)); //parcourt du tableau de droite à gauche
if(order>0){ do gauche++; while((*f2Ptr)(tab[gauche], pivot)); //parcourt du tableau de gauche à droite
do droite--; while(tab[droite] > pivot); //parcourt du tableau de droite à gauche
do gauche++; while(tab[gauche] < pivot); //parcourt du tableau de gauche à droite
}
else if(order <0){
do droite--; while(tab[droite] < pivot); //parcourt du tableau de droite à gauche
do gauche++; while(tab[gauche] > pivot); //parcourt du tableau de gauche à droite
}
if(gauche < droite){ //si deux éléments sont mal placés, on les permutte if(gauche < droite){ //si deux éléments sont mal placés, on les permutte
swap(int, tab[gauche], tab[droite]); swap(int, tab[gauche], tab[droite]);
} }
...@@ -33,7 +26,7 @@ void quicksort(int *tab, int debut, int fin, int order){ ...@@ -33,7 +26,7 @@ void quicksort(int *tab, int debut, int fin, int order){
} }
//récursion //récursion
quicksort(tab, debut, droite, order); quicksort(tab, debut, droite, f1Ptr, f2Ptr);
quicksort(tab, droite+1, fin, order); quicksort(tab, droite+1, fin, f1Ptr, f2Ptr);
} }
\ No newline at end of file
...@@ -20,4 +20,18 @@ bool isSorted(int* array, int size, int order){ ...@@ -20,4 +20,18 @@ bool isSorted(int* array, int size, int order){
} }
} }
return true; return true;
} }
\ No newline at end of file
bool more(int a, int b){
//printf("%d < %d \n", a, b);
return a>b;
}
bool less(int a, int b){
return a<b;
}
bool pair(int a, int b){
return true;
}
bool impair(int a, int b){
return true;
}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment