Сортировка массивов структур с использованием метода выбора - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Привет всем. Помогите, пожалуйста, разобраться с сортировкой. Пытаюсь отсортировать массив структур по полю цена, но ничего толком не выходит. Сортировка идёт по цене, а другие значения не затрагивает. Как привязать сортировку к другим значениям, чтобы они переставлялись местами вместе с ценой?
#include <stdio.h>
 
struct shop
{
       char name[15];  
       char customer[15]; 
       char seller[15];   
       float price;
};
 
struct shop obj[100]; 

int countinfo(void);
void getinfo(int);
void show(int); 
void sort(int);

int i, count;

int main() 
{
countinfo();
getinfo(count);
show(count); 
sort(count);
puts("                           Table after sorting:"); 
show(count); 
 
getch();
getch();
getch();
return(0);
}

void getinfo(count)
{
      int z;
printf("\n\nPlease, write about %i sold goods:\n\n",count);
 
for(i=0;i<count;i++)
{
printf("Goods %i\n",z=i+1); 
printf("          Name: ");
scanf("%s",&obj[i].name);
printf("          Customer: "); 
scanf("%s",&obj[i].customer);
printf("          Seller: ");
scanf("%s",&obj[i].seller);
printf("          Price (must be in $): "); 
scanf("%f",&obj[i].price);
printf("\n");
}
}

void show(count){
 printf("********************************************************************************\n           Name        Customer          Seller           Price\n\n********************************************************************************");
for(i=0;i<count;i++)
{
printf("\n%15s %15s %15s %15.2f\n",
obj[i].name,obj[i].customer,obj[i].seller,obj[i].price); 
}
puts("\n********************************************************************************");
    }

void sort(count)
{
    char tmpc;
    float tmp;
    int j, nMin;
    for(i=0;i<count;i++) 
    { 
        nMin = i;
        tmp = obj[i].price;
        for(j=i+1;j<count;j++)
        {
            if (obj[j].price < tmp)
                        {
               nMin = j;
               tmp = obj[j].price; 
            }
        }
        obj[nMin].price = obj[i].price;
        obj[i].price = tmp;
    }      
}

int countinfo(void)
{
    printf("Please, write how much lines with information about goods do you want to add: ");
    scanf("%i",&count);
    return(0);
}
Пожалуйста, если не сложно, то дайте максимально лёгкий для восприятия ответ, т.к. с языком си знаком меньше недели.

Решение задачи: «Сортировка массивов структур с использованием метода выбора»

textual
Листинг программы
void sort(count)
{
    char tmpc;
    float tmp;
    int j, nMin;
    for(i=0;i<count;i++) 
    { 
        nMin = i;
        tmp = obj[i].price;
        for(j=i+1;j<count;j++)
        {
            if (obj[j].price < tmp)
                        {
               nMin = j;
               tmp = obj[j].price; 
            }
        }
        obj[nMin].price = obj[i].price;
        obj[i].price = tmp;
    }      
}

Объяснение кода листинга программы

  1. Указан тип данных функции - void.
  2. В параметрах функции указан один целочисленный аргумент count.
  3. Внутри функции объявлены следующие переменные:
    • i, j - целочисленные переменные для хранения индексов;
    • nMin - целочисленная переменная для хранения минимального индекса;
    • tmp - переменная с плавающей точкой для временного хранения значения цены;
    • tmpc - символ для временного хранения значения имени.
  4. Используется два вложенных цикла:
    • Внешний цикл выполняется count раз.
    • Внутренний цикл выполняется от i+1 до count-1 раз.
  5. Внутри внутреннего цикла выполняется проверка на меньшее значение цены.
  6. Если найдено меньшее значение, то обновляются переменные nMin и tmp.
  7. После завершения внутреннего цикла, выполняется обмен значениями цены между элементами с индексами i и nMin.
  8. Функция не возвращает никакого значения.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.077 из 5
Похожие ответы