Umsortierung einer Sortierung
-
Hallo,
wenn ich durch eine vorherige Auswahl ein Elemente in einem geordneten Array finde, ich will, dass dieses an die 1. Stelle des Arrays kommt, und die weiteren Stellen um 1 sich evrschieben, wie kann ich dieses hinbekommen?
Bsp: array[i]={2,10,4,5}, durch eine Auswahl möchte ich beispielsweise die '4' an die 1. Stelle bekommen, wie ist dieses zu erhalten?
Es wäre dann: array[i]={4,2,10,5}, hoffe auf Hilfe
-
Am einfachsten wohl so:
#include <stddef.h> #include <stdio.h> #include <string.h> void move_to_first(int arr[], size_t len, size_t index) { int tmp = arr[index]; memmove(arr + 1, arr, index * sizeof(int)); arr[0] = tmp; } int main(void) { int arr[] = { 2, 10, 4, 5 }; size_t i; move_to_first(arr, 4, 2); for(i = 0; i < 4; ++i) { printf("%d\n", arr[i]); } }
-
Nachtrag: Mir fällt gerade auf, dass die Länge des Arrays gar nicht benutzt wird. Also, ganz einfach:
void move_to_first(int arr[], size_t index) { int tmp = arr[index]; memmove(arr + 1, arr, index * sizeof(int)); arr[0] = tmp; } ... move_to_first(arr, 2);
-
void sort(int *arr, int i) { int tmp = arr[i]; for (int j = i; j > 0; --j) arr[j] = arr[j - 1]; arr[0] = tmp; }
Wär auch ne Möglichkeit, aber memmove ist vermutlich besser.