Gyorsan kellene a segítség?
Ezzel mi a baj ? összefésüléses rendezés
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
const int N=20;
int numb[N];
void mergeS(int,int); /
mergeS(0,N-1);
//kiírás
for(int i=0;i<N;i++)cout<<numb[i]<<" ";
cout<<endl;
//algoritmus meghatározása
void mergeS(int b,int t){
int m=(b+t)/2;
if(b<t){ //további rekurzív hívás feltétele
mergeS(b,m);
mergeS(m+1,t);
}
int tmp[20];
int k=0;
int i=b;
int j=m+1;
for(i<=m&&j<=t;;){
if(numb[i]<=numb[j]){
tmp[k]=numb[i];
i++;
k++;
}else if(numb[j]<=numb[i]){
tmp[k]=numb[j];
j++;
k++;
}
}
/*for(i=0;i<20;i++){
}
*/
}
Ehhez felesleges for ciklus, másrészt rossz helyen vannak a kettőspontok így végtelen ciklus lesz a vége:
for(i<=m&&j<=t;;)
Sikerült megoldani : Így fest helyesen az algoritmus, ha valakinek a későbbiekben kellene
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
const int N=20;
int numb[N];
void mergeS(int,int);
int main(){
.
.
.
mergeS(0,N-1);
for(int i=0;i<N;i++)cout<<numb[i]<<" ";
cout<<endl;
system("pause");
return 0;
}
void mergeS(int b,int t){
int m=(b+t)/2;
if(b<t){
mergeS(b,m);
mergeS(m+1,t);
}
int tmp[20];
int k=0;
int i=b;
int j=m+1;
for(;i<=m||j<=t;){
if(i>m){
tmp[k]=numb[j];
k++;j++;
}else if(j>t){
tmp[k]=numb[i];
k++;i++;
}else
if(numb[i]<=numb[j]){
tmp[k]=numb[i]; // k megakpja i értékét
k++;
i++;
}else if(numb[i]>=numb[j]){
tmp[k]=numb[j];
k++;
j++;
}
}
for(i=0;i<k;i++){
numb[b+i]=tmp[i];
}
}
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!