Insertion Sort. Wo liegt Fehler ?



  • void insert(int x[],int length)
    {
    
         for(int i=1;i<length ;i++)
    	{
    
         int j=0;
    
          for( j=0;j<i;j++)
    	  {
    
             if(x[i]<x[j]) break;
    
    	  }
    
    	  int tmp=x[i];
    
           for(int z=i;z>0;z--)
    	   {
              x[z]=x[z-1];
           }
    
    	    x[j]=tmp;
    
    	}
    }
    


  • void insert(int x[],int length)
    {
    
         for(int i=1;i<length ;i++)
    	{
    
         int j=0;
    
          for( j;j<i;j++)
    	  {
    
             if(x[i]<x[j]) break;
    
    	  }
    
    	  int tmp=x[i];
    
           for(int z=i;z>0;z--)
    	   {
              x[z]=x[z-1];
           }
    
    	    x[j]=tmp;
    
    	}
    }
    


  • So Fehler schon entdeckt 🙂

    [cpp]
    void insert(int x[],int length)
    {

    for(int i=1;i<length ;i++)
    {

    int j=0;

    for( j=0;j<i;j++)
    {

    if(x[i]<x[j]) break;

    }

    int tmp=x[i];

    for(int z=i;z>j;z--)
    {
    x[z]=x[z-1];
    }

    x[j]=tmp;

    }
    }



  • void insert(int x[],int length)
    {
    
         for(int i=1;i<length ;i++)
    	{
    
         int j=0;
    
          for( j=0;j<i;j++)
    	  {
    
             if(x[i]<x[j]) break;
    
    	  }
    
    	  int tmp=x[i];
    
           for(int z=i;z>0;z--)
    	   {
              x[z]=x[z-1];
           }
    
    	    x[j]=tmp;
    
    	}
    }
    


  • so der Code stimmt jetzt.

    Was wir in der Schule noch gemacht haben. Da ja das int j nach jedem
    schleifendurchgang neu angelegt wird, kann man das mit einem Sentinel umgehn.

    Weiß jemand wie das geht ?



  • Man merkt dass es spät ist, so jetzt hier der richtige Code.
    Was hat es mit dem Sentinel auf sich ?

    void insert(int x[],int length)
    {
    
         for(int i=1;i<length ;i++)
    	{
    
         int j=0;
    
          for( j=0;j<i;j++)
    	  {
    
             if(x[i]<x[j]) break;
    
    	  }
    
    	  int tmp=x[i];
    
           for(int z=i;z>j;z--)
    	   {
              x[z]=x[z-1];
           }
    
    	    x[j]=tmp;
    
    	}
    }
    

Anmelden zum Antworten