shell将伪代码排序为c++代码
shell sort pseudocode to C++ code
# 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迭代到
在查看算法之前,参数必须是正确的。从这里开始。如果有些东西现在被转储到屏幕上,现在你可以开始调试算法(如果输出是错误的)。如果输出是正确的,那么你的算法可能是正确的。
如果我错了,请给我的回答留言。不要只是"删除"它!?
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 在Linux for Windows上编译C++代码时出错
- 我的字符计数代码计算错误.为什么
- 孤立代码块在结构中引发异常
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 此代码是否违反一个定义规则
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 为什么在这个代码结束循环中没有得到结束
- 在c代码之间共享数据的最佳方式
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值