Сортировка массивов структур с использованием метода выбора - 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;
}
}
Объяснение кода листинга программы
- Указан тип данных функции - void.
- В параметрах функции указан один целочисленный аргумент count.
- Внутри функции объявлены следующие переменные:
- i, j - целочисленные переменные для хранения индексов;
- nMin - целочисленная переменная для хранения минимального индекса;
- tmp - переменная с плавающей точкой для временного хранения значения цены;
- tmpc - символ для временного хранения значения имени.
- Используется два вложенных цикла:
- Внешний цикл выполняется count раз.
- Внутренний цикл выполняется от i+1 до count-1 раз.
- Внутри внутреннего цикла выполняется проверка на меньшее значение цены.
- Если найдено меньшее значение, то обновляются переменные nMin и tmp.
- После завершения внутреннего цикла, выполняется обмен значениями цены между элементами с индексами i и nMin.
- Функция не возвращает никакого значения.