2

これは、一連の数値を昇順にソートするプログラムの 1 つです。配列の左端から末尾までの範囲で最大の数値を見つけ、要素を切り替えてその要素を正しいインデックス位置に移動します。 . 私の問題は、その間の数字が順序付けされていないため、昇順ではないことです。それをプログラムにどのように適合させるかを考えています。現時点での私のコードは次のとおりです。

#include <stdio.h>                                    /* Library inclusions */ 
#include "genlib.h" 
#include "simpio.h"
#define size 7                                        /* Constants */

void sortArray (int numbers[]);                       /* prototypes */
int indexMax (int numbers[], int low, int high);
void swap (int numbers[], int loc, int loc1);
void getArray (int numbers[]);
void displayArray (int numbers[]);

main()
{
      int numbers[size];
      getArray(numbers); 
      sortArray(numbers ); 
      displayArray (numbers); 
      getchar();
}

void getArray (int numbers[])                         /*Function getArray*/
{
     int i;

     for (i=0; i<size; i++)
     {
         printf ("Enter an integer? ");
         numbers[i]=GetInteger();
     }
}

void displayArray (int numbers[])                     /*Function displayArray*/
{
     int i;

     printf ("\n The sorted list is: \n");
     for (i=0; i< size; i++)
     {
         printf ("%d\t", numbers[i]); 
     }
}

void sortArray (int numbers[])                        /*Function sortArray*/
{
     int i , maxInd;

     for (i=0; i<size;i++)
     {
         maxInd = indexMax (numbers, i, size-1);
         swap (numbers, size-1, maxInd);
     }
}

int indexMax (int numbers[], int low, int high)       /*Function indexMax*/
{
    int i, maxInd;

    maxInd=high;
    for (i=low;i<=high;i++)
    {
        if (numbers[i]>numbers[maxInd]) 
        {
                       maxInd =i;
        }
    }
    return (maxInd);
}

void swap (int numbers[], int loc, int loc1)         /*Function swap*/
{
     int temp;

     temp=numbers[loc];
     numbers[loc]=numbers[loc1];
     numbers[loc1]=temp;
}

どうもありがとうございました。:)

4

3 に答える 3

0

関数に問題がある可能性がありますsortArray()

void sortArray (int numbers[])         
{
     int i 

     int maxInd;

     for (i=0; i<size;i++)
     {
         maxInd = indexMax (numbers, i, size-i-1);
         swap (numbers, size-1-i, maxInd);
     }
}

私は小さな変更を加えましたが、うまくいきました!!

于 2013-07-04T13:21:43.323 に答える