Премини към съдържанието

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

Никола Стоянов

Помощ за С/С++

Препоръчан отговор

Здравейте отново :)) Ето следващата задача :Да се провери дали даден целочисен масив е сортиран във възходящ ред.Ако масивът не е сортиран,да се сортира в низходящ ред.Ако може някакви идей за това как ще стане.Благодаря предварително.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Здравейте отново :)) Ето следващата задача :Да се провери дали даден целочисен масив е сортиран във възходящ ред.Ако масивът не е сортиран,да се сортира в низходящ ред.Ако може някакви идей за това как ще стане.Благодаря предварително.

Условието е пределно ясно. Може ли по-конкретно, за кое точно си нямаш идея?

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Здравейте отново :)) Ето следващата задача :Да се провери дали даден целочисен масив е сортиран във възходящ ред.Ако масивът не е сортиран,да се сортира в низходящ ред.Ако може някакви идей за това как ще стане.Благодаря предварително.

За всеки елемент от масива (без първия) се проверява дали е по-голям от предишния.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

За всеки елемент от масива (без първия) се проверява дали е по-голям от предишния.

и ако един не е спираш и сортираш масива :) А определени методи за сортиране се свеждат точно до проверка, ако входа ти е вече сортиран - примерно, сортирането чрез вмъкване. А чиста проверка е О(n). Баш по тая причина, не се проверява, ми направо се сортира.


Сподели този отговор


Линк към този отговор
Сподели в други сайтове

и ако един не е го сортираш :)

Неее, ако не е сортиран трябва да бъде сортиран в обратен ред. А и не е ясно колко надолу как са подредени. И става като цяло n^3 по Колмогоров :)

и...Баш по тая причина, не се проверява, ми направо се сортира.

ВИж това е добра идея. Но по спомени най-леката сортировка е n*log(n), докато проверката си е n

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Неее, ако не е сортиран трябва да бъде сортиран в обратен ред. А и не е ясно колко надолу как са подредени. И става като цяло n^3 по Колмогоров :)

Знаех си че като кажа "го сортираш" и някой ще реши че имам предвид елемента. А аз имах предвид масива. Но т'ва с низходящото го пропуснах :)

Неее, ако не е сортиран трябва да бъде сортиран в обратен ред. А и не е ясно колко надолу как са подредени. И става като цяло n^3 по Колмогоров :)

ВИж това е добра идея. Но по спомени най-леката сортировка е n*log(n), докато проверката си е n

Като цяло зависи от това, какво знаеш за данните. В общият случай вероятността да са сортирани е малка. Ако данните са произволни и много, направо космически малка. И тогава проверката е просто излишна.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Някой от Вас може ли да го направи,защото на мен ми изглежда доста сложно ...

Не е сложно. Проверката е направо елементарна, сортирания има 100 в нета. Аз бих ти помогнал с грешките, но толкова. Не те ли е срам други да ти изкарват оценките?

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Някой от Вас може ли да го направи,защото на мен ми изглежда доста сложно ...

Колега, с риск да дублирам мненията на съфорумниците, аз не виждам особен смисъл да го пишем - ние го знаем как трябва да е. Номера е Вие да се опитате да го реализирате с код, и ние да Ви посочим къде евентуално трябва да се поправи и/или подобри. В пост №54, колегата @capnemo Ви даде идея за проверка дали даден масив вече е сортиран възходящо. Оттук нататък, задачата се свежда до една проста програма за сортиране. Задачи и методи за сортиране из нета има в изобилие.

 

Препоръчвам Ви два метода за сортиране, които са лесни за схващане - Bubble Sort (Метод на мехурчето) и Selection Sort (Метод на пряката селекция).

 

Опитайте се да реализирате задачата с помощта на един (а ако искате и на двата) от тези алгоритми и ако имате проблем, можем да помогнем. 

 

Поздрави !

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
#include <iostream.h>#include <stdio.h>#include <stdlib.h>#include<ctime>int main (){int a[100], N, k;srand(time(NULL)) ;cout <<"n VuVedte brpq elll : "; cin >>N;for (k=1 ; k<=N; k++)a[k] = rand( ) % 100;  printf("nr N  ");for (k=1 ; k<=N; k++) printf("%4i",k) ; printf("nr    ");for (k=1 ; k<=N; k++) printf("%4i",a[k]) ; for (k=1 ; k<=N-1; k++){int min=a[k], nom=k;for (int j=k+1 ; j<=N; j++) if (a[j] < min) {min=a[j]; nom=j;}int x = a[nom] ; a[nom] = a[k] ; a[k] = x ;} printf("nr    ");for (k=1 ; k<=N; k++) printf("%4i",a[k]) ;system("pause"); 	 return 0;	 }

Това е да сортира масива в възходящ ред,как да направя проверката ?

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Това е да сортира масива в възходящ ред,как да направя проверката ?

Между другото, условието гласи да провериш за възходящ, но да сортираш в низходящ. Тоест, трябва да си обърнеш посоката на сортирането.А за проверката, capnemo ти каза:

За всеки елемент от масива (без първия) се проверява дали е по-голям от предишния.

правиш цикъл и сравняваш всеки елемент със следващият. Ако намериш поне един елемент по-голям от следващия, значи не са подредени.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Между другото, условието гласи да провериш за възходящ, но да сортираш в низходящ. Тоест, трябва да си обърнеш посоката на сортирането.А за проверката, capnemo ти каза:правиш цикъл и сравняваш всеки елемент със следващият. Ако намериш поне един елемент по-голям от следващия, значи не са подредени.

Със "Do" "While" ще стане ли ?

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Със "Do" "While" ще стане ли ?

Да, или с for. Като цяло с for ще бъде по-ясно, но иначе няма значение.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Всъщност може да минеш с проверката и сортирането на масива и без изобщо да има реално масив.

Това е удобно ако стойностите на елементите са малко както в случая от 0 до 99, тогава "масива"

може да е произволно голям: N = 20,  100,  1000,  2000 и т.н.

#include <stdio.h>#include <stdlib.h>#include<ctime>int main (){    int b[100], N, i, j, k, s;        srand(time(NULL)) ;    for (j=0; j<100; j++) b[j]=0;        printf("n Vavedte broia elementi : ");     scanf("%d", &N);        i = -1; s = 0;    for (k=0 ; k<N; k++) {        j = rand() % 100;         printf("%4i",j);        if (i > j) s = -1;        b[j]++;        i = j;        }    printf("n");    system("pause");    printf("n");        if (s) for (k=99 ; k>=0; k--)         for (j=0; j<b[k]; j++)             printf("%4i", k) ;    else printf("Masiva e ve4e sortiran vazhodiashto");    printf("n");    system("pause");     return 0;}

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

 

Всъщност може да минеш с проверката и сортирането на масива и без изобщо да има реално масив.

Това е удобно ако стойностите на елементите са малко както в случая от 0 до 99, тогава "масива"

може да е произволно голям: N = 20,  100,  1000,  2000 и т.н.

 

За този конкретен случай, приложения от Вас сортиращ алгоритъм ще е даде по - добри резултати, при достатъчно голям брой на елементите (при малък брой, разликата във времената така или иначе ще е малка). Ако не се лъжа, това трябва да е този алгоритъм всъщност. В практиката и в реалните задачи, за съжаление, е почти неприложим. Почти същото важи и в случаите, когато имаме да сортираме големи числа - long, long long и т.н. Поради това, насочихме запитващия да се опита да реализира сортирането с по-общите алгоритми, които не се влияят от самите данни за сортиране  :).

 

Поздрави !

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

×
×
  • Добави ново...

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите Условия за ползване