快排時棧溢出異常Exception in thread "main" java.lang.StackOverflowError

錯誤原因:

Exception in thread “main” java.lang.StackOverflowError

快排出現錯誤Exception in thread "main"java.lang.StackOverflowError(堆棧溢出錯誤)。出錯原因是在定義數組的初始位置跟結束位置時沒有定義他們之間的大小關係,即數組的初始位置start必須小於結束位置end,即在定義排序方法的開始位置添加 if 條件語句。錯誤如下圖所示:
在這裏插入圖片描述

解決方法:

在定義排序方法的開始位置添加 if 條件語句。
在這裏插入圖片描述

原碼展示

package demo4;

import java.util.Arrays;

public class QuickSort {

    public static void main(String[] args) {
        int[] arr = new int[]{3,4,6,7,2,7,2,8,0,9,1};
        quickSort(arr, 0, arr.length-1);
        System.out.println(Arrays.toString(arr));
    }

    public static void quickSort(int[] arr,int start,int end){
        if(start<end){
            //把數組中的第0個數字作爲標準數
            int stard = arr[start];
            //記錄需要排序的下標
            int low = start;
            int high = end;
            //循環找比標準數大的數和比標準數小的數
            while(low<high){
                //右邊的數字比標準數大
                while(low<high && stard<=arr[high]){
                    high--;
                }
                //使用右邊的數字替換左邊的數
                arr[low] = arr[high];
                //如果左邊的數字比標準數小
                while(low<high && arr[low]<=stard){
                    low++;
                }
                arr[high] = arr[low];
            }
            //把標準數賦給low所在位置的元素(low或high都可以,因爲它們兩個都重複了)
            arr[low] = stard;
            //處理所有的小於標準數的左邊的數字
            quickSort(arr, start, low);
            //處理所有的大於標準數的右邊的數字
            quickSort(arr, low+1, end);

        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章