使用C中的指针以升序对数组进行排序

时间:2018-11-16 18:57:41

标签: c arrays sorting

我正在编写一个程序,该程序创建一个从1到100的随机数数组,并按升序对其进行排序。下面是执行此操作的工作代码,但我需要对其进行修改,以便“交换”功能可以使用指针。 swap函数的调用应如下所示:swap(???,???),其中两个输入是指针。最好的方法是什么?

    #include<stdio.h>
    #include<math.h> 

    int main()
    {
       void fillArray(int sizeArray, int array[sizeArray]);
       void printArray(int sizeArray, int array[sizeArray]);
       void sortArray(int sizeArray, int array[sizeArray]);

       int sizeArray;

       printf("\nSize of the array? ");
       scanf("%d", &sizeArray);

       int array[sizeArray];

       fillArray(sizeArray,array);
       sortArray(sizeArray, array);
       printArray(sizeArray, array);
    }

    void fillArray(int sizeArray, int array[sizeArray])
    {
       int increment;

       for(increment=0; increment<sizeArray; increment++)
       {
          array[increment]=rand()%101;
       }
    }

    void sortArray(int sizeArray, int array[sizeArray])
    {
       void swap(int increment2, int increment, int array[]);
       int increment, increment2, temp;

       for (increment=0; increment < sizeArray ; increment++)
       {
          for (increment2=increment+1; increment2 < sizeArray; increment2++)
          {   
             swap(increment2, increment, array);
          }
       }
    }

    void swap(int increment2, int increment, int array[])
    {
       int temp;
       if (array[increment2] < array[increment])
             {
                temp=array[increment];
                array[increment]=array[increment2];
                array[increment2]=temp;
             }
    }

    void printArray(int sizeArray, int array[sizeArray])
    {
       int increment=0;

       printf("\nHere's the sorted array:\n");

       while(increment<21)
       {
          printf("\n    array[%d] is %d", increment, array[increment]);
          increment++;
       }
    }

输出应如下所示: output

3 个答案:

答案 0 :(得分:0)

如下定义您的swap函数:

void swap(int *increment2, int* increment)

在调用交换函数的地方修改for循环:

for (increment=0; increment < sizeArray ; increment++)
{
      for (increment2=increment+1; increment2 < sizeArray; increment2++)
      {   
         swap(array[increment2], array[increment]);
      }
}

然后,修改交换功能:

void swap(int *increment2, int* increment)
{
       int temp;
       if (increment2 < increment)
       {
            temp= *increment2;
            *increment2=*increment;
            *increment2=temp;
       }

}

答案 1 :(得分:0)

您需要修复函数调用,使参数与指针保持一致。

void swap(int *increment2, int* increment)

然后在交换功能中需要

您需要引用整数*。

Example
int n1;
int* x = 100
n1 = *x;

您可能需要 尊重未来的例子

您的函数接受指针

void swap(int *increment2, int* increment)

如果要引用整数或其他数据类型,请引用其地址,可以执行&进行引用。

int i = 5;
int* x;
x = &i;

x现在是指向i地址的整数指针。

答案 2 :(得分:0)

您的调用代码需要传递整数的地址以进行比较和交换。下列任何一种形式都是可以接受的,并且它们是等效的。

swap(array+increment2, array+increment);
swap(&array[increment2], &array[increment]);

第一种形式采用第一个元素(array)的地址,并添加索引(increment2)以获取正确元素的地址。

第二个版本也许更直接。它使用&地址操作符来获取array[increment2]的地址,该地址是所需的整数。

您的swap函数需要定义如下:

void swap(int** p2, int** p1)
{
    int temp;
    if (*p2 < *p1)
    {
        temp=*p1;
        *p1=*p2;
        *p2=temp;
    }
}

请注意如何使用*运算符对指针进行取消引用以获取用于比较的整数值(并将其存储在temp中)。