2016-05-22 14 views
-1

Das folgende Programm ist in der Lage, die {5, 4, 3, 2, 1} zu sortieren, ist aber nicht in der Lage, {5, 3, 4, 2, 1} aufsteigend zu sortieren, nicht in der Lage herauszufinden, warum dies geschieht brauchen Hilfe in Bezug auf das gleiche?Das erwähnte Einfügesortierprogramm funktioniert nicht für die Eingabe {5, 3, 4, 2, 1}, aber es funktioniert für {5, 4, 3, 2, 1}. Aber warum?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace algoandds 
{ 
    class Program 
    { 
     public void insertsort (int[] arr, int n) 
     { 
      int value , hole ; 

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

       value = arr[i]; 
       hole = i; 
       while(hole > 0 && arr[i-1] > value) /* sorting logic */ 
       { 
        arr[hole] = arr[hole - 1]; 
        hole = hole - 1; 
       } 
       arr[hole] = value; 

      } 

     } 


     static void Main(string[] args) 
     { 
      int[] arr = new int[5]{5 , 3 , 4 , 2 ,1}; 
      Program p1 = new Program(); 
      p1.insertsort(arr, arr.Length); 

      for(int i = 0 ; i < arr.Length ; i++) 
      { 
       Console.Write(arr[i]); 
      } 

     } 
    } 
} 

Antwort

0

Kleine Fehler in der verschachtelten Schleife, soll es sein arr[hole-1] (nicht arr [i-1]), wie Sie brauchen jeden vorherigen Wert im Array zu vergleichen.

while(hole > 0 && arr[hole-1] > value) /* sorting logic */ 

Überprüfen Sie Ihre working code

0

ändern while(hole > 0 && arr[i-1] > value)-while(hole > 0 && arr[hole-1] > value)