【问题标题】:Strand Sort - Sorting the array doesn't work when I increase the number of elements链排序 - 当我增加元素数量时,对数组进行排序不起作用
【发布时间】:2018-12-15 14:17:03
【问题描述】:

我正在尝试编写链排序算法。它在对 6-7 元素进行排序时起作用。但是当我增加元素的数量时,它什么也没有。知道这有什么问题吗?我该如何改进它?


代码1

#include <stdio.h>

void fonk(int *, int *, int);

int main() {

    int a[] = {6, 9, 8, 10000, 9, 8, 9, 8}, 
        b[sizeof(a) / sizeof(int)], 
        c;

    fonk(a, b, sizeof(a) / sizeof(int));

    for (int k = 0; k < sizeof(a) / sizeof(int); k++) 
        printf("%d ",b[k]);

    return 0;
}

void fonk(int *ip, int *op, int indissayisi) { //sorting func

    if(indissayisi != 0) {
        int sub[indissayisi];

        int t = 1,
            missindice = 1,
            tyitutan,
            b = 0;
        sub[t - 1] = *ip;
        *ip = 0;

        for(int k = 1; k-1 < indissayisi; k++) { //getting sub list and changing indices of rest of *ip

            if(sub[t - 1] <= *(ip + k)) { //transfer ip to sub
                sub[t] = *(ip + k);
                t++;
                *(ip + k) = 0;
                missindice++;
            }
            else {
                *(ip + k - missindice) = *(ip + k); //change indice
            }
        }
        int t2 = t;
        tyitutan = indissayisi - t;
        if(*(op + indissayisi) == 0) { //transfering sub to op first time
            for(int l = 0; l < t; l++, t2--) {
                *(op + indissayisi - t2) = sub[l];
            }
        }
        else {
            for(int l = 0; l <  t; l++, t2--) { //transfering and sorting
                if(sub[l] < *(op + indissayisi + b)) {
                    *(op + indissayisi - t2) = sub[l];
                }
                else {
                    *(op + indissayisi - t2) = *(op + indissayisi + b);
                    b++;
                    l--;
                }
            }
        }
        fonk(ip, op, tyitutan);
    }
}

输出以上列表

6 8 8 8 9 9 9 10000

输出int a[] = {6, 9, 8, 10000, 9, 8, 9, 8, -5, 3, -80}

-5 3 6 8 8 8 9 9 9 10000 29930

1 在 DevC++ tdm-gcc 4.9.2 64 位上运行。

【问题讨论】:

  • 不起作用?我对您的代码的编译崩溃了。这发生在打印结果之后(我添加了一个换行符以确保)所以它是 main 不能 return 可能是由于堆栈损坏。

标签: c arrays sorting element


【解决方案1】:

调试:这一行

*(ip+k) = 0;

索引超出了数组int a[] 的边界,而k == 8 则传递给函数fonk。允许的最大索引是7

【讨论】:

  • 感谢您的回答,是的,当我在 for 循环中将 k-1 更改为 k 时,您是对的。
猜你喜欢
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-01
  • 1970-01-01
  • 2019-09-01
  • 2010-10-22
相关资源
最近更新 更多