我正在做C,我遇到了选择排序。我很确定我理解它,但只是想确定一下。 (请不要将此问题标记为副本,因为还有其他问题需要处理选择排序 - 这比理解应用更多。
我的理解是(以伪代码形式):
循环显示数字:将第一个数字设置为最低。循环完成其余部分,将每个新数字检查到当前最低数字。如果新数字较低,则将其设置为新的最低值。循环后,我们知道最低的。
将当前最低元素与未排序数组的第一个元素交换。现在这是“已排序”部分的一部分。循环遍历数组的未排序部分(除第一个元素之外的所有部分)并找到新的最低元素并将其分配给“最低”。与第一个未排序的元素交换最低。重复。
for i = 1 to n - 1
min = i
for j = i + 1 to n
if array[j] < array[min]
min = j
if min != i
swap array[min] and array[i]
如果我在任何地方都离开,请告诉我。
此外,如果有人可以在简单的选择排序的实际C中拼凑一个快速示例,那就太棒了!
答案 0 :(得分:2)
是的正确:
选择排序是搜索和排序的组合。在每次传递期间,具有最小(或最大)值的未排序元素被移动到阵列中的适当位置。排序通过数组的次数比数组中的项数少一个。
c中的简单选择排序:
#include <stdio.h>
int main()
{
int array[100], n, c, d, position, swap;
printf("Enter number of elements\n");
scanf("%d", &n);
printf("Enter %d integers\n", n);
for ( c = 0 ; c < n ; c++ )
scanf("%d", &array[c]);
for ( c = 0 ; c < ( n - 1 ) ; c++ )
{
position = c;
for ( d = c + 1 ; d < n ; d++ )
{
if ( array[position] > array[d] )
position = d;
}
if ( position != c )
{
swap = array[c];
array[c] = array[position];
array[position] = swap;
}
}
printf("Sorted list in ascending order:\n");
for ( c = 0 ; c < n ; c++ )
printf("%d\n", array[c]);
return 0;
}
输出:
C02QT2UBFVH6-lm:~ gsamaras$ gcc -Wall main.c
C02QT2UBFVH6-lm:~ gsamaras$ ./a.out
Enter number of elements
4
Enter 4 integers
1
2
6
-7
Sorted list in ascending order:
-7
1
2
6