shell将伪代码排序为c++代码

shell sort pseudocode to C++ code

本文关键字:c++ 代码 排序 伪代码 shell      更新时间:2023-10-16
# Sort an array a[0...n-1].
gaps = [701, 301, 132, 57, 23, 10, 4, 1]
foreach (gap in gaps)
    # Do an insertion sort for each gap size.
    for (i = gap; i < n; i += 1)
        temp = a[i]
        for (j = i; j >= gap and a[j - gap] > temp; j -= gap)
            a[j] = a[j - gap]
        a[j] = temp

这是维基百科页面中的伪代码。我不确定如果我的c++代码是正确的根据它。下面是我的代码:

void shellSort(int *array, int array_size)
{
  int e, i, j, temp;
  for(e = 0; e < array_size; e++)
  {
      for( i = e; i < array_size; i++)
      {
          temp = array[i];
          for( j = i; j >= e && array[j - e] > temp; j -= e)
          {
             array[j] = array[j-e];
          }
          array[j] = array[temp];
      }
  }
}
下面是我的测试代码:
int main()
{
    int sizes[9] = {9,3,5,7,1,0,6,2,4};
    int size = 0;
    shellSort(sizes,size);
    for(int i=0;i<size;i++)
    {
        cout << sizes[i] << endl;
    }
return 0;
}

但是屏幕上什么也没显示

让我们从顶部开始

void shellSort(int *array, int array_size)
{

你的代码完全省略了所需的空格数组

  const int gaps[] = {701, 301, 132, 57, 23, 10, 4, 1};
  int e, i, j, temp;

外部循环需要跨越间隙,而不是从0到array_size

  for(e = 0; e < sizeof(gaps)/sizeof(int); ++e)
  {
      int gap = gaps[e];

你需要在内循环中使用gaps数组中的gap

      for( i = gap; i < array_size; ++i)
      {
          temp = array[i];
          for( j = i; j >= gap && array[j - gap] > temp; j -= gap)
          {
             array[j] = array[j-gap];
          }

你需要将temp存储回数组

          array[j] = temp;
      }
  }
}

注:我现在手头没有编译器,所以我没有检查,但我认为这是正确的。

还有一些小要点,这是:

  int e, i, j, temp;

是不好的做法,而是在使用每个变量时声明它,即这样做:

      for( int i = gap; i < array_size; ++i)
      {
          int temp = array[i];

由于某种原因(没有给出评论),我的第一个答案被删除了(打字错误-你将大小设置为0,而不是9)。这个问题想知道为什么"它在屏幕上什么也没有显示"。如果你将size设置为0,那么当for循环从0迭代到

在查看算法之前,参数必须是正确的。从这里开始。如果有些东西现在被转储到屏幕上,现在你可以开始调试算法(如果输出是错误的)。如果输出是正确的,那么你的算法可能是正确的。

如果我错了,请给我的回答留言。不要只是"删除"它!?