From bf5d407edc494932034410c6a3c0dbe488203eeb Mon Sep 17 00:00:00 2001 From: Oleksandr Hryshchenko Date: Tue, 9 Nov 2021 10:49:53 +0000 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B8=D0=BB(?= =?UTF-8?q?=D0=B0)=20=D0=BD=D0=B0=20'cv2/program.c'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cv2/program.c | 124 ++++++++++++-------------------------------------- 1 file changed, 29 insertions(+), 95 deletions(-) diff --git a/cv2/program.c b/cv2/program.c index 1c92c12..3cd901b 100644 --- a/cv2/program.c +++ b/cv2/program.c @@ -3,103 +3,38 @@ #include #include +#define SIZE 100 + struct dish{ char name[100]; - float price; + int price; }; // блюда -- название и цена -int comparator (const void * p1, const void * p2){ - return (*(int*)p1 - *(int*)p2); -} // сравнитель для сортировки - -int* insertSort(int* array, int size){ - int temp; - for(int i = 1; i < size; i++){ -  if(array[i].price < array[i-1].price){ -   for(int j = i-1; j >= 0; j--){ -    if(array[i].price >= array[j].price){ -     break; -    } -    else{ -     temp = array[j].price; -     array[j].price = array[i].price; -     array[i].price = temp; -     i = j; -    } -   } -  } - } - - return array; -} - - -void getOrder(struct dish dishesList[100], int dishesNumber, int* result){ //сортиовка по ценам - float allPrises[dishesNumber]; //все цены - float ascendingPrises[dishesNumber]; // для сортировки в будущем - int* order = calloc(dishesNumber, sizeof(int)); //порядок возрастающих элементов в масиве - int counter = 0; //счетчик - - for(int i = 0; i < dishesNumber; i++){ - allPrises[i] = dishesList[i].price; - ascendingPrises[i] = allPrises[i]; - } - - ascendingPrises = insertSort(ascendingPrices, dishesNumber); //процеес сортировки - - for(int i = 0; i < dishesNumber; i++){ //запись порядка элемента в основном массиве - for(int j = 0; j < dishesNumber; j++){ - STEP: - if(ascendingPrises[i] == allPrises[j]){ - for(int y = 0; y < counter; y++){ - if(order[y] == j){ - j++; - goto STEP; - } - } - order[counter] = j; - counter++; - break; - } - } - } - - memcpy(result, order, dishesNumber * sizeof(int)); //копирование одного в другой -} - -void getAlphabetOrder(int* order, struct dish dishesList[100], int dishesNumber){ //сорторвка по алфавиту - int* result = calloc(dishesNumber, sizeof(int)); - int counter = 0; - int temp; - - for(int i = 0; i < dishesNumber; i++){ - for(int j = i; j < dishesNumber; j++){ //чтение масивов их сравнение - if(dishesList[order[i]].price == dishesList[order[j]].price){ //сравнение если цены совпадают - if(dishesList[order[i]].name[0] < dishesList[order[j]].name[0]){ // если цены сопали но уже в порядке алфавита - break; - } - else if(dishesList[order[i]].name[0] == dishesList[order[j]].name[0]){ //если цены совпали но первые буквы одиннаковые - if(dishesList[order[i]].name[1] < dishesList[order[j]].name[1]){ - break; - } - else{ - temp = order[i]; - order[i] = order[j]; - order[j] = temp; - } - } - else{ //цены совпали но не в порядке алфавита - temp = order[i]; - order[i] = order[j]; - order[j] = temp; - } - } - } - result[counter] = order[i]; //запись сортирвки - counter++; - } - - memcpy(order, result, dishesNumber * sizeof(int)); //запись результата в main +void insertSort(struct pizza array[100], int finalCounter){ + struct pizza temp; +  for(int i = 1; i < finalCounter; i++){ +   if(array[i].price < array[i-1].price){ +    for(int j = i-1; j >= 0; j--){ +     if(array[i].price > array[j].price){ +      break; +     } +     else if(array[i].price == array[j].price){ +      if(strcmp(array[i].name, array[j].name) < 0){ +       temp = array[j]; +       array[j] = array[i]; +       array[i] = temp; +       i = j; +      } +     } +     else{ +      temp = array[j]; +     array[j] = array[i]; +     array[i] = temp; +     i = j; +     } +    } +   } +  } } int main(){ @@ -119,8 +54,7 @@ int main(){ } int* printOrder = calloc(finalCounter, sizeof(int)); //полная запись всего результата - getOrder(dishesList, finalCounter, printOrder); - getAlphabetOrder(printOrder, dishesList, finalCounter); + insertSort(dishesList, finalCounter); for(int j = 0; j < finalCounter; j++){ //вывод printf("%s", dishesList[printOrder[j]].name);