C 关于选择排序的澄清?
我在做C时遇到了选择排序。我很确定我理解,但我只是想确定一下。(请不要因为还有其他关于选择排序的问题而将此问题标记为重复问题——这更多是为了理解而不是应用) 我的理解是(以伪代码形式): 循环遍历数字数组:将第一个数字设置为最低。循环浏览其余部分,检查每个新编号是否为当前最低值。如果新数字较低,则将其设置为新的最低值。循环通过后,我们知道最低的 将当前最低的元素与未排序数组的第一个元素交换。这现在是“排序”部分的一部分。循环遍历数组的未排序部分(除第一个元素外的所有元素),找到新的最低元素并将其指定给“最低”。将最低值与第一个未排序的元素交换。重复一遍C 关于选择排序的澄清?,c,arrays,algorithm,sorting,selection-sort,C,Arrays,Algorithm,Sorting,Selection Sort,我在做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]
对于i=1到n-1
min=i
对于j=i+1到n
如果数组[j]<数组[min]
min=j
如果最小!=我
交换数组[min]和数组[i]
如果我要离开任何地方,请告诉我
此外,如果有人能在实际的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