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.


Anmelden zum Antworten