Implementazioni di algoritmi/Merge sort: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m Annullate le modifiche di 151.73.222.38 (discussione), riportata alla versione precedente di 79.52.193.187
Riga 52:
 
===[[w:C (linguaggio)|C]]===
<source lang="C">
#include <stdio.h>
#define LEN 8
 
///chiamata a funzione:
void merge(int a[], int left, int center, int right) {
mergeSort(vettore);
int i, j, k;
int b[LEN];
 
Questa versione di mergeSort lavora su una struttura di tipo nodo che contiene una chiave di ordinamento (key) e un pacchetto di dati (data).
i = left;
Nelle chiamate ricorsive non vengono mai dichiarati nuovi vettori.
j = center+1;
Vengono dichiarate solo poche variabili nello Stack.
k = 0;
la funzione mergeSort si occupa di allocare un solo vettore ausiliario e alla fine di eliminarlo.
la funzione Msort esegue il cosiddetto "divide";
La funzione merge "impacchetta il vettore".
 
while ((i<=center) && (j<=right)) {
if (a[i] <= a[j]) {
b[k] = a[i];
i++;
} else {
b[k] = a[j];
j++;
}
 
typedef struct data{
k++;
char*some;
}
int data;
} DATA;
 
typedef struct _nodo{
while (i<=center) {
int key;
b[k] = a[i];
DATA data;
i++;
}nodo;
k++;
int n;
}
 
void merge(nodo*a,nodo*aux,int left,int right,int rightEnd){
while (j<=right) {
int i,num,temp,leftEnd=right-1;
b[k] = a[j];
temp=left;
j++;
num=rightEnd-left+1;
k++;
while((left<=leftEnd)&&(right<=rightEnd)){
}
if(a[left].key<=a[right].key){
 
aux[temp++]=a[left++];
for (k=left; k<=right; k++)
}
a[k] = b[k-left];
else{
aux[temp++]=a[right++];
}
}
while(left<=leftEnd){
aux[temp++]=a[left++];
}
while(right<=rightEnd){
aux[temp++]=a[right++];
}
for (i=1;i<=num;i++,rightEnd--){
a[rightEnd]=aux[rightEnd];
}
}
void mSort(nodo*a,nodo*aux,int left,int right){
 
int center;
void mergesort(int a[], int left, int right) {
if (left<right){
int center;
center=(left+right)/2;
 
mSort(a,aux,left,center);
if(left<right) {
center = mSort(lefta,aux,center+1,right)/2;
mergesort merge(a, aux,left, center+1,right);
}
mergesort(a, center+1, right);
merge(a, left, center, right);
}
}
void mergeSort(nodo*p){
 
nodo*temp=(nodo*)malloc(sizeof(nodo)*n);
int main(void) {
mSort(p,temp,0,n-1);
int a[LEN], i;
int i;
for(i=0; i<LENn; i++) {
free(temp);
printf(": ");
scanf("%d", &a[i]);
}
 
mergesort(a, 0, LEN-1);
 
printf("[ ");
 
for(i=0; i<LEN; i++)
printf("%d ", a[i]);
 
printf("]\n");
 
return 0;
}
</source>
 
===[[w:C (linguaggio)|C (metodo iterativo)]]===