数组a [i]按降序打印,但我的逻辑是升序

Pri*_*nka 3 c arrays sorting

你能告诉我为什么我总是a[i]按降序排列阵列吗?请帮忙.

for(i=0;i<10;i++)  
{    
    for (j=0;j<10;j++)
    {   
       if(a[i]>=a[j])
       { 
          temp=a[i];
          a[i]=a[j];
          a[j]=temp;
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

das*_*ght 9

问题是,你的排序运行两个完整的循环,在比较a了所有对小号ij,包括那些地方i更大的j(此时你不应该被交换的物品).为了使选择排序*起作用,它需要仅从数组的未排序部分中选择其交换候选.

以下是如何修复您的实现:

for(i=0;i<10-1;i++) // You do not need to touch the last element, so end at 10-1
{    
    for (j=i+1;j<10;j++) // Make it j = i+1
    {   
       if(a[i] > a[j]) // >, not >= : no need to swap when two items are equal
       { 
          temp=a[i];
          a[i]=a[j];
          a[j]=temp;
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

* Selection Sort是您正在实施的排序算法的奇特名称.