提到的插入排序程序不适用于输入 {5 , 3 , 4 , 2 ,1} 但它适用于 {5 , 4 , 3 , 2 , 1} 。但为什么?
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 , 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]);
}
}
}
}
将while(hole > 0 && arr[i-1] > value)
更改为while(hole > 0 && arr[hole-1] > value)
嵌套循环中的小错误,它应该是 arr[hole-1]
(不是 arr[i-1]),因为您需要比较数组中的每个先前值。
while(hole > 0 && arr[hole-1] > value) /* sorting logic */
检查你的working code
以下程序能够对 {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]);
}
}
}
}
将while(hole > 0 && arr[i-1] > value)
更改为while(hole > 0 && arr[hole-1] > value)
嵌套循环中的小错误,它应该是 arr[hole-1]
(不是 arr[i-1]),因为您需要比较数组中的每个先前值。
while(hole > 0 && arr[hole-1] > value) /* sorting logic */
检查你的working code