C 按日期排序问题
很抱歉在我解决其他问题之前打开另一个主题。这是一个更大的问题。我不知道是否有人会理解我的代码,因为我把它翻译成了英语。这个程序就像一个来自互联网的订单列表或类似的东西。您可以添加订单、删除订单、按ID或日期对订单进行排序、保存订单并加载订单。按日期排序是我的问题。例如,我添加了2013、2011和2012等日期。当我尝试对它们进行排序时,什么也没有发生,它们保持相同的顺序。如果有人理解这一点,请告诉我问题是什么?这是一个学校的项目,我需要把它修好直到明天。有人能帮我吗C 按日期排序问题,c,sorting,date-sorting,C,Sorting,Date Sorting,很抱歉在我解决其他问题之前打开另一个主题。这是一个更大的问题。我不知道是否有人会理解我的代码,因为我把它翻译成了英语。这个程序就像一个来自互联网的订单列表或类似的东西。您可以添加订单、删除订单、按ID或日期对订单进行排序、保存订单并加载订单。按日期排序是我的问题。例如,我添加了2013、2011和2012等日期。当我尝试对它们进行排序时,什么也没有发生,它们保持相同的顺序。如果有人理解这一点,请告诉我问题是什么?这是一个学校的项目,我需要把它修好直到明天。有人能帮我吗 // according
// according = 1 (Date) 2 = (Price)
void sort(int accor)
{
int i,j,replace=0;
ORDER *Pom;
for(i=0;i<Piece-1;i++){
for(j=0;j<Piece-1;j++){
if(according == 1){
if(strcmp(Item[j]->Date, Item[j+1]->Date) > 0)
replace = 1;
else
replace = 0;
}else if(according == 2){
if(Item[j]->Price > Item[j+1]->Price )
replace = 1;
else
replace = 0;
}
if(replace){
Pom = Item[j];
Item[j] = Item[j+1];
Item[j+1] = Pom;
}
//依据=1(日期)2=(价格)
无效排序(国际雅高)
{
int i,j,replace=0;
订单*Pom;
对于(i=0;iDate)>0)
替换=1;
其他的
替换=0;
}否则如果(根据==2){
if(项目[j]->价格>项目[j+1]->价格)
替换=1;
其他的
替换=0;
}
如果(更换){
Pom=项目[j];
第[j]项=第[j+1]项;
第[j+1]项=Pom;
}
将循环更改为如下所示:
for (i = (Piece - 1); i > 0; i--)
{
for (j = 1; j <= i; j++)
{
// compare and swap
}
}
for(i=(件-1);i>0;i--)
{
对于(j=1;j)一个小小的挑剔:Item[j+]->Date
应该是Item[j+1]->Date
。尝试使用i
而不是j+1
,在交换项目之前,检查i
是否不等于j
。希望有帮助。什么类型的Item[]
?顺序数组*
?声明的项在哪里,它是如何填充的?你试过调试你的代码吗?它是否进入了替换检查?user2448027,不使用j
和j+1
进行冒泡排序是正确的。i
循环的唯一原因是确保所有元素被排序是因为每个j
循环可能不会对多个元素进行排序。我也尝试了此解决方案,但它不起作用。j-1修复了日期问题,但ID现在是问题所在,它会使所有元素崩溃time@eduroam在按ID排序的部分中,您是否也将j+1
替换为j-1
可能是某些数组索引超出了范围,即小于0且大于size-1。