From 8bfd43bcaf63fe6584fe0811e053ab584bb81c57 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Fri, 3 Mar 2017 17:13:51 +0100 Subject: [PATCH] TP2 exo3: Add quick sort implementation. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérôme Benoit --- TP2/exo1/exo1.c | 4 +-- TP2/exo3/Makefile | 79 +++++++++++++++++++++++++++++++++++++++++++++++ TP2/exo3/exo3.c | 58 ++++++++++++++++++++++++++++++++++ 3 files changed, 139 insertions(+), 2 deletions(-) create mode 100644 TP2/exo3/Makefile create mode 100644 TP2/exo3/exo3.c diff --git a/TP2/exo1/exo1.c b/TP2/exo1/exo1.c index 25d6c99..514f794 100644 --- a/TP2/exo1/exo1.c +++ b/TP2/exo1/exo1.c @@ -1,6 +1,6 @@ #include -void permuter (int T[], int i1, int i2) { +void permuter(int T[], int i1, int i2) { int tmp = T[i1]; T[i1] = T[i2]; T[i2] = tmp; @@ -27,7 +27,7 @@ void SelecEch(int T[], int n) { void AfficheTab(int T[], int n) { for (int i = 0; i < n; i++) { - printf("valeur a index=%d=%d\n", i, T[i]); + printf("T[%d]=%d\n", i, T[i]); } } diff --git a/TP2/exo3/Makefile b/TP2/exo3/Makefile new file mode 100644 index 0000000..d6f215e --- /dev/null +++ b/TP2/exo3/Makefile @@ -0,0 +1,79 @@ +# Sample Makefile to build simple project. +# +# This Makefile expect all source files (.c) to be at the same level, in the +# current working directory. +# +# It will automatically generate dependencies, compile all files, and produce a +# binary using the provided name. +# +# Set BINARY_NAME to the name of the binary file to build. +# Set BUILD_TYPE to either debug or release +# +# Automatic dependencies code from: +# http://make.mad-scientist.net/papers/advanced-auto-dependency-generation/#tldr +BINARY_NAME=exo3 +BUILD_TYPE=debug + +# ==================================== +# DO NOT CHANGE STUFF BEYOND THIS LINE +# ==================================== + +all: $(BINARY_NAME) + +CC=gcc +LD=gcc + +WARN_FLAGS = -Wall -Wextra +STD_FLAG = -std=c99 + +ifeq ($(BUILD_TYPE),debug) +BUILDDIR := .build/debug +DEBUG_FLAG = -g +STRIP_FLAG = +OPTI_FLAG = -O0 +else +BUILDDIR := .build/release +DEBUG_FLAG = +STRIP_FLAG = -s +OPTIFLAG = -O3 +endif + +CFLAGS := $(CFLAGS) $(WARN_FLAGS) $(STD_FLAG) $(OPTI_FLAG) $(DEBUG_FLAG) +LDFLAGS := $(LDFLAGS) $(STRIP_FLAG) + +OBJDIR := $(BUILDDIR)/objs +$(shell mkdir -p $(OBJDIR)) + +SRCS=$(wildcard *.c) +OBJS=$(patsubst %.c,$(OBJDIR)/%.o,$(SRCS)) + +DEPDIR := $(BUILDDIR)/deps +$(shell mkdir -p $(DEPDIR)) +DEPFLAGS = -MT $@ -MMD -MP -MF $(DEPDIR)/$*.Td +POSTCOMPILE = mv -f $(DEPDIR)/$*.Td $(DEPDIR)/$*.d + +$(BINARY_NAME): $(OBJS) + @echo "[LD ] $@" + @$(LD) $(CFLAGS) $(LDFLAGS) $^ $(LDLIBS) -o $@ + +$(OBJDIR)/%.o: %.c $(DEPDIR)/%.d + @echo "[C ] $*" + @$(CC) $(DEPFLAGS) $(CFLAGS) -c $< -o $@ + @$(POSTCOMPILE) + +$(DEPDIR)/%.d: ; + +.PRECIOUS: $(DEPDIR)/%.d + +include $(wildcard $(patsubst %,$(DEPDIR)/%.d,$(basename $(SRCS)))) + +clean: + @echo "[CLN]" + -@rm -r $(BUILDDIR) + -@rm $(BINARY_NAME) + +disassemble: $(BINARY_NAME) + objdump -d $< | less + +symbols: $(BINARY_NAME) + objdump -t $< | sort | less diff --git a/TP2/exo3/exo3.c b/TP2/exo3/exo3.c new file mode 100644 index 0000000..2970b00 --- /dev/null +++ b/TP2/exo3/exo3.c @@ -0,0 +1,58 @@ +#include + +void permuter(int T[], int i1, int i2) { + int tmp = T[i1]; + T[i1] = T[i2]; + T[i2] = tmp; +} + +void AfficheTab(int T[], int n) { + for (int i = 0; i < n; i++) { + printf("T[%d]=%d\n", i, T[i]); + } +} + +void TriRapide(int T[], int n) { + int pivot = T[0]; + int TP[n]; + int TG[n]; + int np = 0; + int ng = 0; + + if (n == 1) {;} + else if (n == 2) { + if (T[0] > T[1]) { permuter(T, 0, 1); } + } + else if (n > 2) { + for (int i = 1; i < n; i++) { + if (T[i] < pivot) { + TP[np] = T[i]; + np++; + } else { + TG[ng] = T[i]; + ng++; + } + } + TriRapide(TP, np); + TriRapide(TG, ng); + for (int i = 0; i < np; i++) { + T[i] = TP[i]; + } + T[np] = pivot; + for (int i = 0; i < ng; i++) { + T[np + 1 + i] = TG[i]; + } + } +} + +int main() { + int T[7] = {4, 2, 7, 3, 8, 6, 5}; + + AfficheTab(T, 7); + + TriRapide(T, 7); + + AfficheTab(T, 7); + + return 0; +} -- 2.34.1