我正在try 用C语言编写代码,从最小到最大对n个数字进行排序.当所有数字都是正数时,它工作得很好,但当我输入负数时,它在第一个索引处返回0.
以下是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include "mySort.h"
int main(int argc, char *argv[])
{
int data[100000]; /* Array of ints to sort */
int nDataItems;
if (argc > 1) {
nDataItems = argc;
for (int i = 0; i < nDataItems; i++)
data[i] = atoi(argv[i]);
} else {
nDataItems = 4;
data[0] = 10;
data[1] = 20;
data[2] = 30;
data[3] = 40;
}
mySort(data, nDataItems);
for (int i = 0; i < nDataItems - 1; i++) {
if (data[i] > data[i + 1]) {
printf("Sorting error at index %d \n", nDataItems);
exit(1);
}
}
printf("Printing Array: \n");
for (int i = 1; i < nDataItems; i++)
printf("%d \n", data[i]);
return 0;
}
以下是用于排序的代码:
void mySort(int d[], unsigned int n)
{
int x, y;
for (int i = 0; i < n; i++)
{
x = i - 1;
y = d[i];
while (x >= 0 && d[x] > y) {
d[x+1] = d[x];
x--;
}
d[x + 1] = y;
}
}
据我所知,代码接受负数并将其转换为0.我怀疑这是atoi
的问题,但不确定.Here is a picture of the terminal when I try testing it.:
C:\Users\danes\Desktop\COE428\lab1›testSort2 2 76 33 11 9
Printing Array
2
9
11
33
76
C:\Users\danes\Desktop\COE428\lab1> testSort2 -5 11 29 15 2
Printing Array
0
2
11
15
29