你能告诉我为什么我总是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)
问题是,你的排序运行两个完整的循环,在比较a了所有对小号i和j,包括那些地方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是您正在实施的排序算法的奇特名称.