繁体   English   中英

如何使用气泡排序或选择排序以降序对指针数组中的数组进行排序?

[英]How can I sort arrays in a pointer array in a descending order using bubble sorts or selection sort?

我正在研究一个项目,它以几种不同的方式对指针数组中的数组进行排序,但我仍然坚持使用一种排序方式。 阵列的构建方式是第一个数字表示后面的数字量。 例如,(3,0,23,1):此数组在第一个索引后有3个数字)。 我想从最低到最高的数字对数组进行排序, 但我不想更改第一个索引,这意味着数组看起来像这样(3,0,1,23)。 这些是数组和指针数组:

int arr1[] = { 3, 9, 6, 7 };
int arr2[] = { 2, 5, 5 };
int arr3[] = { 0 };
int arr4[] = { 1, 6 };
int arr5[] = { 4, 5, 6, 2, 1 };
int * pArr[SIZE] = { arr1, arr2, arr3, arr4, arr5 };

此代码用于排序功能

for (i = 0; i < SIZE; i++)
        {
            for (j = 1; j < pArr[i][0]+1; j++)
            {
                if (pArr[i][j] < pArr[i][j - 1])
                {
                    temp = pArr[i][j];
                    pArr[i][j] = pArr[i][j - 1];
                    pArr[i][j - 1] = temp;
                }
            }
        }

我想使用冒泡排序或选择排序只是因为我是编程新手并且对其他排序方法不太了解。

这个给你。

#include <stdio.h>

void bubble_sort( int a[], size_t n )
{
    for ( size_t last = n; !( n < 2 ); n = last )
    {
        for ( size_t i = last = 1; i < n; i++ )
        {
            if ( a[i] < a[i-1] )
            {
                int tmp = a[i];
                a[i] = a[i-1];
                a[i-1] = tmp;
                last = i;
            }
        }
    }
}

void sort_multiple_arrays( int * a[], size_t n )
{
    for ( size_t i = 0; i < n; i++ )
    {
        bubble_sort( a[i] + 1, a[i][0] );
    }
}

int main(void) 
{
    int arr1[] = { 3, 9, 6, 7 };
    int arr2[] = { 2, 5, 5 };
    int arr3[] = { 0 };
    int arr4[] = { 1, 6 };
    int arr5[] = { 4, 5, 6, 2, 1 };
    int * parr[] = { arr1, arr2, arr3, arr4, arr5 };

    const size_t N = sizeof( parr ) / sizeof( *parr );

    sort_multiple_arrays( parr, N );

    for ( size_t i = 0; i < N; i++ )
    {
        for ( size_t j = 0; j < parr[i][0] + 1; j++ )
        {
            printf( "%d ", parr[i][j] );
        }
        putchar( '\n' );
    }

    return 0;
}

程序输出是

3 6 7 9 
2 5 5 
0 
1 6 
4 1 2 5 6 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM