首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这个C++插入排序不能工作?

为什么这个C++插入排序不能工作?
EN

Stack Overflow用户
提问于 2016-12-08 06:19:07
回答 1查看 96关注 0票数 0

我正在学习C++,这是我第一个要对数字列表排序的程序之一,我在肯尼思·H·罗森的书中找到了这个算法,并用C++写了它。当我在纸上检查它时,它似乎是正确的,但在实践中它有一些错误。例如,我输入3( enter )2(enter)1(enter)4(enter)5(enter),它返回3114.5作为答案。我不知道是什么问题,请帮帮忙。

代码语言:javascript
复制
int main()
{
    int i, j, s, n, k, a[50];
    cout << "Enter number of numbers:\n";
    cin >> n;
    cout << "Enter the numbers:\n";
    for (i = 0; i < n; i++) {
        cin >> a[i];
    }
    for (j = 2; j < n; j++) {
        i = 1;
        while (a[j] > a[i]) {
            i = i + 1; // Here we find the proper place to(if needed) directly insert our number into the sorted part.
        }
        s = a[j];
        for (k = 0; k < j - i - 1; k++) {
            a[j - k] = a[j - k - 1];
        }
        a[i] = s;
    }
    for (i = 0; i < n; i++) {
        cout << a[i] << " ";
    }
    _getch();
    return 0;
}

我还包括了头文件和命名空间,但不是在这里编写的。如果您认为我使用了这么多变量,很抱歉,我需要它们:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-08 06:26:21

您的索引I应该从第一个元素开始,它是0而不是1。

修复第11行应完成以下工作:

代码语言:javascript
复制
for (j = 2; j < n; j++) {
    i = 0;
    while (a[j] > a[i]) {

编辑:哦,还有,变量j应该从第二个元素开始,它是索引1,而不是2:

代码语言:javascript
复制
for (j = 1; j < n; j++) {
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41033008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档