第一个for循环将从末尾开始,并将其值交换为数组a[0->其自身索引]中的最大值
int selection_sort(int *a, int size) {
int i, j, swap;
for (i = size - 1; i <= 0; i--) {
/*this will find the max between o index to i th index*/
for (j = 0; j <= i; j++) {
if (a[i] < a[j]) {
swap = a[i];
a[i] = a[j];
a[j] = a[i];
}
}
}
}
输出是相同的阵列,顺序不变
对于初学者来说,函数具有返回类型int
,但不返回任何内容。此外,第二个参数应该具有无符号整数类型size_t
,而不是有符号整数类型int
。
此外,您应该在使用变量的最小作用域中声明变量。
你的代码的主要问题是这个for循环的主体
for (i = size - 1; i <= 0; i--) {
如果CCD_ 4不小于CCD_。
还有一个打字错误
a[j] = a[i];
你必须写
a[j] = swap;
除此之外,还有多余的互换。
的功能如下
void selection_sort( int *a, size_t n )
{
for ( size_t i = n; i-- != 0; )
{
size_t max = i;
for ( size_t j = 0; j < i; j++ )
{
if ( a[max] < a[j] ) max = j;
}
if ( max != i )
{
int swap = a[max];
a[max] = a[i];
a[i] = swap;
}
}
}
这是一个示范节目。
#include <stdio.h>
void selection_sort( int *a, size_t n )
{
for ( size_t i = n; i-- != 0; )
{
size_t max = i;
for ( size_t j = 0; j < i; j++ )
{
if ( a[max] < a[j] ) max = j;
}
if ( max != i )
{
int swap = a[max];
a[max] = a[i];
a[i] = swap;
}
}
}
int main( void )
{
int a[] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
const size_t N = sizeof( a ) /sizeof( *a );
for ( size_t i = 0; i < N; i++ )
{
printf( "%d ", a[i] );
}
putchar( 'n' );
selection_sort( a, N );
for ( size_t i = 0; i < N; i++ )
{
printf( "%d ", a[i] );
}
putchar( 'n' );
}
其输出为
9 8 7 6 5 4 3 2 1 0
0 1 2 3 4 5 6 7 8 9
您的for循环是错误的for (i = size - 1; i <= 0; i--)
。比较应为>=0
。
此外,价值交换是不正确的
if (a[i] < a[j]) {
swap = a[i];
a[i] = a[j];
a[j] = a[i];
}
应该是
if (a[i] < a[j]) {
swap = a[i];
a[i] = a[j];
a[j] = swap;
}