C中选择排序的修改版本
modified version of selection sort in C
我试图修改选择排序,将最大的元素放在数组的末尾,然后对 n - 1 项重复选择排序,直到 n 为 0。我的代码可以编译,但输出仍然是一个未排序的数组,请帮帮我!
#include <stdio.h>
void selection_sort(int arr[], int n);
int main ()
{
int n;
scanf("%d", &n);
int arr[n];
for (int i = 0; i < n; i++)
scanf("%d", &arr[i]);
selection_sort(arr, n);
for(int i = 0; i < n; i++)
printf("%d\n", arr[i]);
return 0;
}
void selection_sort(int arr[], int n)
{
if(n <= 0)
return;
while(n > 0)
{
int max = 0;
int temp, x;
for(int i = 0; i < n; i++)
{
if(arr[i] >= max)
max = arr[i];
x = i;
}
temp = arr[n - 1];
arr[n - 1] = max;
arr[x] = temp;
selection_sort(arr, --n);
}
}
部分
if(arr[i] >= max)
max = arr[i];
x = i;
错了。你忘了写 {}
,所以 x = i;
是无条件执行的,循环后的交换总是用最后一个元素完成。这意味着交换是在同一个元素之间完成的,实际上什么都不做。
另请注意,同时执行循环 while(n > 0)
和递归 selection_sort(arr, --n);
是一种浪费。你只需要其中之一。
另一个注意事项是用 0
初始化 max
会使它在输入数组的所有元素都为负时表现错误。
最后,您应该使用一致的缩进正确格式化您的代码。
试试这个:
void selection_sort(int arr[], int n)
{
if(n <= 0)
return;
while(n > 0)
{
int max = arr[0];
int temp, x;
for(int i = 0; i < n; i++)
{
if(arr[i] >= max)
{
max = arr[i];
x = i;
}
}
temp = arr[n - 1];
arr[n - 1] = max;
arr[x] = temp;
--n;
}
}
我试图修改选择排序,将最大的元素放在数组的末尾,然后对 n - 1 项重复选择排序,直到 n 为 0。我的代码可以编译,但输出仍然是一个未排序的数组,请帮帮我!
#include <stdio.h>
void selection_sort(int arr[], int n);
int main ()
{
int n;
scanf("%d", &n);
int arr[n];
for (int i = 0; i < n; i++)
scanf("%d", &arr[i]);
selection_sort(arr, n);
for(int i = 0; i < n; i++)
printf("%d\n", arr[i]);
return 0;
}
void selection_sort(int arr[], int n)
{
if(n <= 0)
return;
while(n > 0)
{
int max = 0;
int temp, x;
for(int i = 0; i < n; i++)
{
if(arr[i] >= max)
max = arr[i];
x = i;
}
temp = arr[n - 1];
arr[n - 1] = max;
arr[x] = temp;
selection_sort(arr, --n);
}
}
部分
if(arr[i] >= max)
max = arr[i];
x = i;
错了。你忘了写 {}
,所以 x = i;
是无条件执行的,循环后的交换总是用最后一个元素完成。这意味着交换是在同一个元素之间完成的,实际上什么都不做。
另请注意,同时执行循环 while(n > 0)
和递归 selection_sort(arr, --n);
是一种浪费。你只需要其中之一。
另一个注意事项是用 0
初始化 max
会使它在输入数组的所有元素都为负时表现错误。
最后,您应该使用一致的缩进正确格式化您的代码。
试试这个:
void selection_sort(int arr[], int n)
{
if(n <= 0)
return;
while(n > 0)
{
int max = arr[0];
int temp, x;
for(int i = 0; i < n; i++)
{
if(arr[i] >= max)
{
max = arr[i];
x = i;
}
}
temp = arr[n - 1];
arr[n - 1] = max;
arr[x] = temp;
--n;
}
}