Ho provato a scrivere gli algoritmi Merge-Sort e Quick-Sort, ma ci sono dei problemi.
Per il QuickSort, ho uno stackOverflow che non capisco da cosa dipenda,
E poi problemi nel Merge-Sort, l'ho preso da wikipedia, mi va in loop...codice:public class QuickSort { public static void main(String [] args) { int [] a={5,4,6,7,8,0}; QSort(a,0,a.length-1); for(int i=0; i<a.length; i++) System.out.print(a[i]+" "); } public static void QSort(int [] A, int i, int j) { if(i>=j) return; int r=partition(A,i,j); //primo stackOverflow QSort(A,i,r); //Altro stackOverflow che si ripete. QSort(A,r+1,j); } public static int partition(int [] A, int p, int r) { int i=p-1; int j=r+1; int x=A[r]; while(true) { do j=j-1; while(A[j]>x); do i=i+1; while(A[i]<x); if(i<j) swap(A,i,j); else return j; } } public static void swap(int [] A,int a, int b) { int tmp=A[a]; A[a]=A[b]; A[b]=tmp; } }
codice:public class MergeSort { public static void main(String [] args) { int [] a={3,6,5,7,9,8,0,5}; MSort(a,0,a.length-1); for(int i=0; i<a.length; i++) System.out.print(a[i]+" "); } public static void merge(int [] a, int left,int center, int right) { int [] S=new int[a.length-1]; int i= left; int j=center+1; int k=0; while(i<center && j<right) { if(a[i]<a[j]) { S[k++]=a[i]; i=i++; } else if(a[i]>a[j]) { S[k++]=a[j]; j=j++; } } while(i<center) { S[k++]=a[i]; i=i++; } while(j<right) { S[k++]=a[j]; j=j++; } for(k=left; k<right; k++) //non sono molto convinto del funzionamento di questa istruzione a[k]=S[k-left]; } public static void MSort(int [] a,int left, int right) { if(left>=right) return; int center=(left+right)/2; MSort(a,left,center); MSort(a,center+1,right); merge(a, left,center,right); } }

Rispondi quotando