- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 pset3 上实现排序功能时遇到问题。我使用过GDB,发现我的排序函数没有对任何内容进行排序。我不确定是否存在语法问题,或者逻辑是否有点困惑。
void sort(int values[], int n)
{
for (int k = 0; k < n; k++)
{
for (int j = 0; j < n; j++)
{
if (values[k] >= values[j])
{
int temp = values[k];
values[k] = values[j];
values[j] = temp;
}
}
}
}
最佳答案
你已经很接近了,但是你的循环不太正确 - 改变:
for (int k = 0; k < n; k++)
{
for (int j = 0; j < n; j++)
{
至:
for (int k = 0; k < n - 1; k++)
{
for (int j = k + 1; j < n; j++)
{
要理解为什么需要进行此更改,请考虑内部循环 (j
) 只需将索引 k
上方的元素与索引k
处的当前元素。因此,外循环 (k
) 需要从 0
迭代到 n - 2
(比最后一个元素少一个),并且对于每个外循环循环迭代内部循环需要从k + 1
(k
上面的第一个元素)迭代到n - 1
(最后一个元素)。
<小时/>NOTE: by pure chance it seems that the original code does appear to work correctly, even though it appears at first glance that it shouldn't. I have tested it with various edge cases and even though it performs many redundant swaps, the final result always seems to be sorted (suprisingly though the output is in descending order whereas the fixed code generates results in ascending order, as expected). Credit to Jonathan Leffler for spotting this - see his answer and demo program.
还有一个小问题——这个测试:
if (values[k] >= values[j])
实际上应该是:
if (values[k] > values[j])
这并不是不正确的(代码仍然可以工作),但是交换相等的元素是没有意义的,所以它的效率有些低。
关于cs50 pset3排序函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40770881/
我不知道为什么这不能编译,对我来说看起来不错。想要制作一个程序来构建像 super 马里奥关卡末尾那样的金字塔。会询问用户 获取一个数字,然后将金字塔 build 到该高度。 #include #i
我以为我已经完成了 Caesar,但是当运行 CHeck50 时,我的代码因以下原因失败:使用 23 作为 key 将“barfoo”加密为“yxocll”输出无效的 ASCII 文本日志运行./凯撒
我对编程真的很陌生,我刚刚开始在哈佛的 CS50 上尝试一些问题集。如果有人能向我指出为什么我的代码是错误的,我将不胜感激。 编译并运行代码后,没有任何输出。 另一方面,有人可以向我解释一下“roun
我意识到,当我在 bool 搜索中包含“else return false”时,它永远无法“找到针”。相反,如果我要删除那部分,程序就可以正常工作。它能够找到 2008 而找不到 2013。知道为什么
我正在编写一个程序,它接受输入并打印出使用的最少数量的硬币。当我运行程序并输入内容时,它没有按预期工作并且不打印任何内容。我在这里做错了什么? #include #include int main
我目前正在尝试CS50的Pset2,在caesar.c中,用户应该通过argv输入k;如果他不这样做,我就应该“大喊大叫”用户告诉他使用命令行参数。但如果我尝试以下操作,我总是会遇到段错误。 #inc
问题集要求我们使用哈希创建一个半金字塔。这是它的外观图像的链接 - 我明白了这个想法并编写了程序,直到打印空格(我已将其替换为“_”,以便我可以测试它的前半部分。 但是,当我尝试运行我的程序时,它不会
我正在尝试解决problem 1A on codeforces 但我不断收到测试:#1,时间:0 毫秒,内存:1828 KB,退出代码:1,检查器退出代码:0,结论:RUNTIME_ERROR你可以查
我目前正在使用 C 语言研究 CS50 中的维吉尼亚密码。要求是制作一个程序,根据关键字(两者都是用户输入的)对一些明文进行加密。它将基于维吉尼亚密码进行加密。我发现很难用语言描述 Vigenere
这是 edX.org 上 CS50 类(class)的 PSET 3。 我已经为这个问题集苦苦挣扎了很长时间;特别是,我无法使 binarySearch 函数工作。我一直遇到段错误,但我不知道如何处理
我正在研究 Pset 2 hack.c,到目前为止,我已经设法了解了总体概念。但是,我的代码仍然不起作用。它编译并运行但不打印任何内容。 我不完全确定这里出了什么问题,我可能忽略了一些东西? #inc
我陷入了调整大小问题的垂直调整大小部分。我从 Zamayla 的伪代码中知道,我每次都需要在输出文件上写入一个数组,但我不知道如何将值从一个传递到另一个。我是否需要使用 malloc 函数并通过指针传
我遵循了 pset 3 recover 的伪代码,我的代码只输出一个图像,调试器 (debug50) 在 number = fread(buffer, 1, 512, file); 中循环 4 次后退
我是这个主题的新手。我尝试自己调试此问题,但是出现了段错误核心转储,我无法弄清楚原因。有人可以帮我吗? # include # include # include # include int main
我正在尝试制作一个程序,提供最少数量的硬币找零,但如果我给出的数字不是可分为四等分的数字,它就会惨败。例如,如果我输入 1.25,我会得到 5 个 25 美分,但如果我输入 1.26,我会得到 5 个
#include #include #include "bmp.h" int main(int argc, char *argv[]) { // ensure proper usage
我对 cs50 pset 1(马里奥不太舒服)的解决方案没有打印出金字塔。相反,它只是打印出一个#。我已经尝试了多次,但我在尝试编译时得到的只是错误,说它不能识别 int i 或者分号应该移到新行。更
我创建了以下代码作为对 CS50x PSET2: Vigenere 的回答,它在某种程度上有效,但是当运行 check50 时,我得到了下面列出的一些错误: :) vigenere.c exists.
我不太明白这些错误从何而来。我正在尝试创建一个简单的 C 程序,它接受一个字符串并向 ASCII 值添加偏移量,以便创建一个极其简单的加密。 #include #include #include
我目前正在学习 CS50 类(class),但我完全陷入了调整大小的问题(不太舒服)。任务是制作一个程序,该程序接受输入 .bmp 文件,将其缩放 n 次并将其写入输出 .bmp 文件。但我的代码只是
我是一名优秀的程序员,十分优秀!