2016-05-22 8 views
-1

Следующая программа способна сортировать {5, 4, 3, 2, 1}, но не может сортировать {5, 3, 4, 2, 1} по возрастанию, не в состоянии понять, почему это происходит нужна помощь в отношении того же?Упомянутая программа сортировки вставки не работает для ввода {5, 3, 4, 2, 1}, но работает для {5, 4, 3, 2, 1}. Но почему?

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]); 
      } 

     } 
    } 
} 

ответ

0

Небольшая ошибка в вашем вложенном цикле, оно должно быть arr[hole-1] (не обр [я-1]), как вам нужно сравнить все предыдущие значения в массиве.

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

Проверьте ваш working code

0

Изменение while(hole > 0 && arr[i-1] > value) в while(hole > 0 && arr[hole-1] > value)