gpt4 book ai didi

c - 直接插入排序的错误 C 实现

转载 作者:太空宇宙 更新时间:2023-11-04 05:54:10 24 4
gpt4 key购买 nike

C 的初学者,我正在尝试实现直接插入排序。我的代码有一个错误,但我很难找到它。如果有人的经验可以为我指明正确的方向,将不胜感激!!

几点:

  • 变量sizeTable 是数组的维数(10)。它在任何阶段都不应该改变,但在退出排序算法时,它的值为 100。
  • 代码在 10 到 1(即 100 到 10)的值下运行良好。
  • 我故意使用不同的变量名(即 aSizemySizesizeTable 作为数组维度参数(确保我理解传递的参数到函数)。然而,使用一个变量名不会改变任何东西(谢天谢地!)。
  • 当我在 CodeChef 中运行时,出现运行时错误,而在 CodeBlocks 中,我获得了一个包含 100 个元素的数组,前 10 个元素是正确排序的初始数组,平衡随机值来自内存。为什么这样 ? (这是一个附属问题...)

提前致谢!

#include <stdio.h>
#include <stdlib.h>


void printTable(int myTable[], int aSize);
void straightInsertion(int myTable[], int mySize);

int main()
{

int sizeTable = 10;
int myTable[10] = {100, 90, 80, 70, 60, 50, 40, 30, 20, 10};

printTable(myTable, sizeTable);
straightInsertion(myTable, sizeTable);
printf("\n");
printTable(myTable, sizeTable);


return 0;
}

//Loop to display the array
void printTable(int myTable[], int aSize)
{
int i = 0;

for (i = 0; i < aSize; i++)
{
printf("%d ", myTable[i]);
}
}

//Sorting algo
void straightInsertion(int myTable[], int mySize)
{
int i = 0, j = 0, temp = 0;
for(j = 1; j<= mySize; j++)
{
temp = myTable[j];
i = j-1;
while(i>=0 && myTable[i] > temp)
{
myTable[i+1] = myTable[i];
i--;
}
myTable[i+1] = temp;
}
}

最佳答案

简单的边界错误。你有:

for(j = 1; j<= mySize; j++)

你应该使用:

for (j = 1; j < mySize; j++)

避免覆盖数组的末尾。

关于使用打印功能的出色工作。我可以建议您在函数中添加 putchar('\n'); 以避免需要在调用代码中使用 printf("\n");

关于c - 直接插入排序的错误 C 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31422389/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com