簡體   English   中英

使用C中的指針以升序對數組進行排序

[英]Sorting an array in ascending order using pointers in C

我正在編寫一個程序,該程序創建一個從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++;
       }
    }

輸出應如下所示: 輸出

如下定義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;
       }

}

您需要修復函數調用,以使參數與指針一起使用。

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地址的整數指針。

您的調用代碼需要傳遞整數的地址以進行比較和交換。 下列任何一種形式都是可以接受的,並且它們是等效的。

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

第一種形式采用第一個元素( array )的地址,並添加索引( increment2 )以獲得正確元素的地址。

第二個版本也許更直接。 它使用& address-of運算符獲取array[increment2]的地址,該地址是所需的整數。

您的swap函數需要定義如下:

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

請注意如何使用*運算符對指針進行解引用 ,以獲取用於比較的整數值(並存儲在temp )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM