【问题标题】:Mentioned insertion sort program is not working for the input {5 , 3 , 4 , 2 ,1} but it is working for {5 , 4 , 3 , 2 , 1} . But Why?提到的插入排序程序不适用于输入 {5 , 3 , 4 , 2 ,1} 但它适用于 {5 , 4 , 3 , 2 , 1} 。但为什么?
【发布时间】:2016-05-22 15:02:26
【问题描述】:

以下程序能够对 {5 , 4 , 3 , 2 ,1} 进行排序,但无法将 {5 , 3 , 4 , 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]);
            }

        }
    }
}

【问题讨论】:

    标签: c# sorting data-structures insertion-sort


    【解决方案1】:

    嵌套循环中的小错误,应该是 arr[hole-1](不是 arr[i-1]),因为您需要比较数组中的每个先前值。

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

    检查您的working code

    【讨论】:

      【解决方案2】:

      while(hole &gt; 0 &amp;&amp; arr[i-1] &gt; value) 更改为while(hole &gt; 0 &amp;&amp; arr[hole-1] &gt; value)

      【讨论】:

        猜你喜欢
        • 2021-05-30
        • 1970-01-01
        • 1970-01-01
        • 2021-05-30
        • 2022-10-08
        • 1970-01-01
        • 1970-01-01
        • 2013-03-15
        • 1970-01-01
        相关资源
        最近更新 更多