void main()
{
int a[] = { 10, 3, 4, 2, 1, 0 };
int i = 0;
int temp_index;
int temp_min;
int temp;
a[i];
int j;
a[j];
int n = sizeof(a) / sizeof(int);
for (; i < n - 1; i++)
{
int temp_min = i;
int j = i + 1;
for (; j < n; j++)
{
if (a[i] > a[j])
{
temp_min = j;
}
}
int temp = a[temp_min];
a[temp_min] = a[i];
a[i] = temp;
}
int k = 0;
for (; k < n; k++)
{
printf("%d", a[k]);
}
}
答案 0 :(得分:1)
您比较
if (a[i] > a[j]) {
temp_min = j;
}
而不是
if (a[temp_min] > a[j]) { ... }
答案 1 :(得分:-1)
选择排序从a [i] .. a [n-1]到第i个位置中选择最小的数字。要实现此目的,您可以更改for循环-
for (; i < n - 1; i++)
{
int temp_min = a[i];
int swapIndex=-1;
int j = i + 1;
for (; j < n; j++)
{
if (temp_min > a[j])
{
temp_min = a[j];
swapIndex = j;
}
}
if(swapIndex !=-1){
a[swapIndex] = a[i];
a[i] = temp_min;
}
}
还可以更改
if (a[i] > a[j])
{
temp_min = j;
}
将您的代码添加到此-
if (a[temp_min] > a[j])
{
temp_min = j;
}
它将起作用,但在这种情况下-
int temp = a[temp_min];
a[temp_min] = a[i];
a[i] = temp;
对于已经排序的数组,例如{1,2,3,4}
,此交换部分将是多余的