Forum » Programiranje » [C++] QuickSort in QuickSort z mediano
[C++] QuickSort in QuickSort z mediano
EdHardy ::
Pozdravljeni,
pri nalogi moram neko zaporedje (polje) urediti naraščajoče in sicer na 2 načina:
- QuickSort brez mediane
- QuickSort z mediano
http://codepad.org/83I5npLW
Ta koda je napisana po naslednjih navodilih, vendar se vedno ne deluje. Ne gre za napako v sintaksi. Problem je ko probam po urejanju polje izpisat, se nic ne izpise v konzolo. Pred urejanjem pa se polje brez problema izpise. Morda sem kje narobe interpretiral navodila in jih narobe pretvoril v kodo ?
NAVODILA :
QuickSort:
Deli:
Dodatek za funkcijo deli, ce zelim QuickSort z mediano:
+ Zanima še me, kam dodam to kodo iz zadnje slike, tako da bo QuickSort uporabil mediano ?
Lp
pri nalogi moram neko zaporedje (polje) urediti naraščajoče in sicer na 2 načina:
- QuickSort brez mediane
- QuickSort z mediano
http://codepad.org/83I5npLW
Ta koda je napisana po naslednjih navodilih, vendar se vedno ne deluje. Ne gre za napako v sintaksi. Problem je ko probam po urejanju polje izpisat, se nic ne izpise v konzolo. Pred urejanjem pa se polje brez problema izpise. Morda sem kje narobe interpretiral navodila in jih narobe pretvoril v kodo ?
NAVODILA :
QuickSort:
Deli:
Dodatek za funkcijo deli, ce zelim QuickSort z mediano:
+ Zanima še me, kam dodam to kodo iz zadnje slike, tako da bo QuickSort uporabil mediano ?
Lp
- spremenil: EdHardy ()
smacker ::
Si prebral kaj piše v outputu? Sintaktična napaka. Pri do-while ti manjka ; za while(pogoj); Vrstica 23 in 27.
smoke ::
Če ti kaj koristi, sem jaz algoritem par let nazaj implementiral.
Primer uporabe:
LP
#include <algorithm>
#include <utility>
namespace internal {
template <typename RandomAccessIter, typename Compare>
std::pair<RandomAccessIter, RandomAccessIter> partition(RandomAccessIter begin,
RandomAccessIter end,
Compare compare) {
std::iter_swap(begin, (begin + (end - begin) / 2));
auto v = *begin;
auto mk = begin;
auto i = begin;
auto vk = end - 1;
while (!(vk < i)) {
if (compare(*i, v))
std::iter_swap(mk++, i++);
else if (compare(v, *i))
std::iter_swap(vk--, i);
else
++i;
}
return std::make_pair(mk, ++vk);
}
} // namespace internal
template <typename RandomAccessIter, typename Compare>
void quick_sort(RandomAccessIter begin, RandomAccessIter end, Compare compare) {
if ((end - begin) < 2)
return;
auto r = internal::partition(begin, end, compare);
quick_sort(begin, r.first, compare);
quick_sort(r.second, end, compare);
}
Primer uporabe:
#include <vector>
#include "quick_sort.h"
int main(int argc, char** argv) {
std::vector<int> stevila = {6, 2, 7, 2, 7, 0, 3, 6, 22,
256, 53, 6, 1, 2, 6, 2, 2, 7};
quick_sort(std::begin(stevila), std::end(stevila),
[](int a, int b) { return a < b; });
return 0;
}
LP
amacar ::
Moja par let stara naloga:
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int deli(int zaporedje[],int dno,int vrh)
{
int pe;
int l;
int d;
int m;
m=(dno+vrh)/2;
int zamenjaj=zaporedje[m];
zaporedje[m]=zaporedje[dno];
zaporedje[dno]=zamenjaj;
pe=zaporedje[dno];
l=dno;
d=vrh;
while(l<d)
{
while(zaporedje[l]<=pe && l<vrh)
{
l=l+1;
}
while(zaporedje[d]>=pe && d>dno)
{
d=d-1;
}
if(l<d)
{
int zacasni=zaporedje[d];
zaporedje[d]=zaporedje[l];
zaporedje[l]=zacasni;
}
else
{
int zacasni=zaporedje[d];
zaporedje[d]=zaporedje[dno];
zaporedje[dno]=zacasni;
}
}
return d;
}
void hitro_uredi(int zaporedje[],int dno,int vrh)
{
int j;
if(dno<vrh)
{
j=deli(zaporedje,dno,vrh);
hitro_uredi(zaporedje,dno,j-1);
hitro_uredi(zaporedje,j+1,vrh);
}
}
bool preveri(int zaporedje[],int dno,int vrh)
{
for(int i=dno;i<vrh-1;i++)
{
if(zaporedje[i+1]<zaporedje[i])
{
cout<<endl<<"Zaporedje je urejeno napacno!"<<endl;
return 0;
}
}
return 1;
}
void random(int zaporedje[],int velikost1)
{
for(int x=0;x<velikost1;x++)
{
zaporedje[x]=rand();
}
}
void izpisi(int zaporedje[],int velikost1)
{
for(int x=0; x<velikost1;x++)
{
cout<< zaporedje[x]<<" ";
}
}
void urejeno_narascajoce(int zaporedje[],int velikost1)
{
for(int x=0;x<velikost1;x++)
{
zaporedje[x]=x+1;
}
}
void urejeno_padajoce(int zaporedje[],int velikost1)
{
for(int x=0;x<velikost1;x++)
{
zaporedje[x]=velikost1-x;
}
}
int main()
{
srand((unsigned)time(NULL));
int *zaporedje=NULL;
int velikost1=0;
int menu;
clock_t zacetek,konec;
double cas;
do
{
cout<<endl<<"Hitro uredi - izbira:"<<endl;
cout<<endl;
cout<<"1 Generiraj nakljucno zaporedje"<<endl;
cout<<"2 Generiraj urejeno narascajoce zaporedje"<<endl;
cout<<"3 Generiraj urejeno padajoce zaporedje"<<endl;
cout<<"4 Izpis zaporedja"<<endl;
cout<<"5 Uredi"<<endl;
cout<<"6 Konec"<<endl;
cin>>menu;
if(menu==1)
{
cout<<endl<<"Vnesite kolicino generiranih stevil: ";
cin>>velikost1;
zaporedje=new int[velikost1];
random(zaporedje,velikost1);
}
else if(menu==2)
{
cout<<endl<<"Vnesite kolicino generiranih stevil: ";
cin>>velikost1;
zaporedje=new int[velikost1];
urejeno_narascajoce(zaporedje,velikost1);
}
else if(menu==3)
{
cout<<endl<<"Vnesite kolicino generiranih stevil: ";
cin>>velikost1;
zaporedje=new int[velikost1];
urejeno_padajoce(zaporedje,velikost1);
}
else if(menu==4)
{
if(velikost1==0)
{
cout<<endl<<"Najprej generirajte zaporedje!"<<endl;
}
else
{
izpisi(zaporedje,velikost1);
}
}
else if(menu==5)
{
if(velikost1==0)
{
cout<<endl<<"Najprej generirajte zaporedje!"<<endl;
}
else
{
zacetek=clock();
hitro_uredi(zaporedje,0,velikost1-1);
konec=clock();
cas=(double)(konec-zacetek)/CLOCKS_PER_SEC;
cout<<endl<<"Urejanje je trajalo: "<<cas<<" sekund!";
if(preveri(zaporedje,0,velikost1)==0)
{
}
else
{
cout<<endl<<"Zaporedje je sedaj narascajoce urejeno"<<endl;
}
}
}
}
while(menu!=6);
delete zaporedje;
return 0;
}
Vredno ogleda ...
| Tema | Ogledi | Zadnje sporočilo | |
|---|---|---|---|
| Tema | Ogledi | Zadnje sporočilo | |
| » | Quicksort algoritemOddelek: Programiranje | 1563 (1115) | krneki0001 |
| » | [Java] QuicksortOddelek: Programiranje | 843 (679) | MrBrdo |
| » | Quick sort ascending/descendingOddelek: Programiranje | 2224 (1904) | infiniteLoop |
| » | It means business (strani: 1 2 3 4 5 6 7 8 )Oddelek: Znanost in tehnologija | 30100 (16099) | Thomas |
| » | [Turbo Pascal] Pomoč...Oddelek: Programiranje | 1585 (1487) | Grey |





