Diskuze: 3. a 5. nejmenší prvek pole
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Neregistrovaný

Zobrazeno 11 zpráv z 11.
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
asi bych na to použil dictionry to znamená, že si to tam dáš:
key: index prku
value: hoota z původního pole
no a pak to seřadíš podle value.
Nakonec vypíšeš key od 3. a 5. prvku.
jo a si si doufám jistý že ten kód cos tu napsal je opravdu c#.
Bubblesort tu máme samozřejmě vysvětlený i s kódem: http://www.itnetwork.cz/…programovani
No první věc, jsi si opravdu jistý že toto je C# ? ... každopádně seřaď to
například pomocí Select sort algoritmu http://www.itnetwork.cz/…le-velikosti a vypiš 3 a 5
prvek.
Diksuzi přesouvám do správné sekce
Select sort mi pro pole o maximální velikosti 500 prvků přijde zbytečně složitý, bubble sort, popř. insert sort bohatě postačí. Ale když to pole seřadí, tak už z něj nedostane původní pozice těch dvou prvků.
Musí si udělat druhé pole, kde bude mít pozice a upravit si třídící algoritmus tak, aby třídil obě naráz. Což nebude složité.
Až teď čtu zbytek dotazu, no to máš pravdu. Hmm nevím jestli tu
existuje něco jako Dictionary, porad ty já se odtutd klidím ,akorát
budu přihlížet
//EDIT
A nebo to napsal Sdraco, lehčí způsob
To je příliš složité, stačí do druhého pole ukládat pointery na prvky místo prvků jako takových. Pak stačí seřadit pointery podle velikostí hodnot na které ukazují a zpětně se z pointeru dá spočítat pozice.
Respektive, udělal bych to nějak takhle, připadá mi to nejjednodušší.
#include <stdio.h>
void CopyPointersToArray(int*,int**,int);
void SortPtrArray(int**,int);
int GetPosition(int*,int**,int);
int main()
{
int size;
int* arr = NULL;
int** ptrArr = NULL;
int i;
srand(time(0));
printf("Zadejte velikost pole: ");
scanf("%d",&size);
arr = malloc(sizeof(int) * size);
ptrArr = malloc(sizeof(int*) * size);
for(i = 0; i < size; i++)
arr[i] = rand() % 1000;
CopyPointersToArray(arr,ptrArr,size);
SortPtrArray(ptrArr,size);
printf("Vypis pole:\n");
for(i = 0; i < size; i++)
printf("%d ",arr[i]);
printf("\n3. nejmensi prvek je %d a jeho pozice je %d",*ptrArr[2],GetPosition(arr,ptrArr,2));
printf("\n5. nejmensi prvek je %d a jeho pozice je %d",*ptrArr[4],GetPosition(arr,ptrArr,4));
getchar();
getchar();
free(ptrArr);
free(arr);
}
void CopyPointersToArray(int* arr, int** ptrArr, int size)
{
int i;
for(i = 0; i < size; i++)
ptrArr[i] = &arr[i];
}
void SortPtrArray(int** ptrArr, int size)
{
int i, j;
for(i = 0; i < size; i++)
for(j = 0; j < size - 1; j++)
if(*ptrArr[j] > *ptrArr[j + 1])
{
int* temp = ptrArr[j];
ptrArr[j] = ptrArr[j + 1];
ptrArr[j + 1] = temp;
}
}
int GetPosition(int* arr, int** ptrArr, int pos)
{
return ptrArr[pos] - arr;
}
Vstup není ošetřen a pozice se počítá od 0.
Zobrazeno 11 zpráv z 11.