Сортировка массивов структур с использованием метода выбора - 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.
- Функция не возвращает никакого значения.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д