Сортировка массива с указателями в C - PullRequest
0 голосов
/ 05 октября 2018

то, что должно происходить в коде, заключается в том, что пользователь должен ввести число для массива, а затем используется функция для сортировки массива с указателями в правильном порядке.Проблема в том, что результат не выходит должным образом, и я не знаю, что я делаю неправильно.Любая помощь будет оценена.Спасибо!

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

#define MINIMUM_QUANTITY  2
#define MAXIMUM_QUANTITY  10
#define QUIT              0

int quantityValue();
float obtainInfo(int data);
float dataSort(float array1[], float newArray[]);

int main()
{
   int   quantity;
   float *fdata,

   while(quantityValue(quantity)) != QUIT)
   {
      if (fdata = (float*)malloc(sizeof(*fdata) * quantity) == NULL)
      {  
         exit(0);
      }

      obtainInfo(fdata, quantity);
      dataSort(fdata, quantity);

      free(fdata);
   }
   return 0;
}

int quantityValue()
{
   int choice;

   do
   {
      printf("\nHow many numbers are there?");
      scanf("%d", &choice);
   }
   while(choice > MINIMUM_QUANTITY || choice < MAXIMUM_QUANTITY);
   return choice;
}

float obtainInfo(int data)
{
   float array[data],
         value;

   for(counter = 0; counter <= array[data]; counter++)
   {
      printf("\nvalue %d", counter + 1);
      scanf("%f", value);     
      array[data] = value;
      array++;

   return array[data];
}

float dataSort(float array1[], float newArray[])
{
   int *startOfData
       *data
       *startOfSort
       *sort
       *biggestNumber
       temp;

   if(p_sort = (float*)malloc(sizeof(*p_sort) == NULL)
   {
      exit(0);
   }

   for(startOfData = array1[]; startOfData < biggestNumber; startOfData++
   {
      for(startOfSort = newArray; startOfSort < startOfData; startOfSort++)
      {
         temp = *data; 
         *data = *sort;
         *sort = temp;

    free(p_sort)
    return;
}

1 Ответ

0 голосов
/ 05 октября 2018

Для сортировки массива есть несколько алгоритмов, которые могут вам помочь, одним из наиболее часто используемых является быстрая сортировка.Вот полный код для сортировки массива:

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

void Swap(int array[], int i, int j)
{
  int temp;
  temp = array[i];
  array[i] = array[j];
  array[j] = temp;
}


void QuickSort(int array[], int beg, int end)
{
  int pivot, k, b, e;

    while(beg < end)
    {
      b = beg; k = (beg+end)/2; e = end;
      pivot = array[k];

      while(1)
      {
        while((b <= e) && (array[b] <= pivot)) b++;
        while((b <= e) && (array[e] > pivot)) e--;

        if(b > e) break;


      Swap(array, b, e);

        if(k == e) k = b;

        b++; e--;

      }
      array[k]=array[e];
      array[e]=pivot;
      e--;

      if((e-beg)<(end-b))
      {
        QuickSort(array, beg, e);
        beg = b;
      }
      else
      {
        QuickSort(array, b, end);
        end = e;
      }

    }

  return ;
}

void display(int * array, int n)
{
 for(int i = 0; i < n ; i++)
 {
   printf("%d\n", array[i]);
 }
}


int main()
{
  int array[] = {1,2,77,5,42,33,0,4,12,21,55}; //array to sort, instead you can use a function that fills an array, and then pass it to QuickSort function

  QuickSort(array,0,sizeof(array)/sizeof(int));

  display(array, sizeof(array)/sizeof(int));


  return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...