Stackoverflow with Quicksort Java implementation

前端 未结 9 1505
一生所求
一生所求 2020-12-06 19:25

Having some problems implementing quicksort in java. I get a stackoverflow error when I run this program and I\'m not exactly sure why. If anyone can point out the error, it

9条回答
  •  温柔的废话
    2020-12-06 19:58

    import java.util.Arrays;
    
    
    public class QuickSort {
    
    
        public static int pivot(int[] a, int lo, int hi){
            int mid = (lo+hi)/2;
            int pivot = a[lo] + a[hi] + a[mid] - Math.min(Math.min(a[lo], a[hi]), a[mid]) - Math.max(Math.max(a[lo], a[hi]), a[mid]);
    
            if(pivot == a[lo])
                return lo;
            else if(pivot == a[hi])
                return hi;
            return mid;
        }
    
        public static int partition(int[] a, int lo, int hi){
    
            int k = pivot(a, lo, hi);
            //System.out.println(k);
            swap(a, lo, k);
            //System.out.println(a);
            int j = hi + 1;
            int i = lo;
            while(true){
    
                while(a[lo] < a[--j])
                    if(j==lo)   break;
    
                while(a[++i] < a[lo])
                    if(i==hi) break;
    
                if(i >= j)  break;
                swap(a, i, j);
            }
            swap(a, lo, j);
            return j;
        }
    
        public static void sort(int[] a, int lo, int hi){
            if(hi<=lo)  return;
            int p = partition(a, lo, hi);
            sort(a, lo, p-1);
            sort(a, p+1, hi);
        }
    
        public static void swap(int[] a, int b, int c){
            int swap = a[b];
            a[b] = a[c];
            a[c] = swap;
        }
    
        public static void sort(int[] a){
            sort(a, 0, a.length - 1);
            System.out.print(Arrays.toString(a));
        }
    
        public static void main(String[] args) {
            int[] arr = {5,8,6,4,2,9,7,5,9,4,7,6,2,8,7,5,6};
            sort(arr);
        }
    }
    

    Try this. It will work for sure.

提交回复
热议问题