c - 冒泡排序函数中另一个数组的指针数组 (C)

标签 c arrays sorting pointers

我想创建一个指针数组的冒泡排序函数,每个指针都指向另一个数组 - 在函数内部,我收到一个错误,我违反了写入位置 (Visual Studio)

附言,我愿意 (*parr)++因为每个数组的第一个值显示的是没有第一个值的数组的长度,所以我需要从第二个框开始冒泡排序(例如 arr[1] 而不是 arr[0])。 有人可以写信给我,我该如何解决? 感谢帮助 (我需要对原始数组的值而不是数组的指针进行排序)。

int main(void){

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


    system("PAUSE");
    return (0);
}
void func1(int** parr)
{
    int i;
    int temp;
    int j;
    int k;
    int length;
    for (i = 0; i < 5; i++, (parr)++)
    {
        length = **parr;
        (*parr)++;
        for (j = 0; j < length-1; j++)
        {
            for (k = 0; k < length - j - 1; k++, (*parr)++)
            {
                if ((**parr)>(*(*parr + 1)))
                {
                    temp = **(parr);
                    **(parr) = (*(*parr + 1));
                    (*(*parr + 1)) = temp;
                }
            }
        }


    }


}

最佳答案

这似乎有效。在 func1 中使用解引用作为 part[i][k] 比移动指针更容易。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void func1(int** parr);

int main(void){
    int j;
    int arr0[4] = { 3, 9, 6, 7 };
    int arr1[3] = { 2, 5, 5 };
    int arr2[1] = { 0 };
    int arr3[2] = { 1, 6 };
    int arr4[5] = { 4, 5, 6, 2, 1 };
    int* parr[5] = { arr0, arr1, arr2, arr3, arr4 };
    func1(parr);
    for (j = 1; j <= arr0[0]; j++)
    {
        printf ( "arr0[%d] %d\n", j, arr0[j]);
    }
    for (j = 1; j <= arr4[0]; j++)
    {
        printf ( "arr4[%d] %d\n", j, arr4[j]);
    }
    return (0);
}

void func1(int** parr)
{
    int i;
    int temp;
    int j;
    int k;
    int length;
    for (i = 0; i < 5; i++)
    {
        length = **parr;

        for (j = 0; j < length; j++)
        {
            for (k = 1; k < length - j; k++)
            {
                temp = *((*parr)+k);
                if (*((*parr)+k)>*((*parr)+k+1))
                {
                    temp = *((*parr)+k);
                    *((*parr)+k) = *((*parr)+k+1);
                    *((*parr)+k+1) = temp;
                }
            }
        }
        *parr++;// next array
    }
}

关于c - 冒泡排序函数中另一个数组的指针数组 (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29715975/

相关文章:

php - 排序在 Knp 分页器中不起作用

c - 使用 fwrite 将数据从链表写入二进制文件。

将 ARM 代码转换为 C

c - 将 Imagemagic C 库与 anjuta 一起使用

python - 二维数组中元素的顺序测试?

arrays - 是否有 O(n) 算法为正整数数组生成无前缀数组?

c - 在哪里可以找到 C++ STL 映射的 C 实现?

php - 在php中从数组中获取结果

javascript - 根据 D3 中的属性值对对象进行排序

python - 按嵌套列表的最高值对字典进行排序