歸併排序演算法出現下標越界異常

2021-10-06 11:41:23 字數 792 閱讀 8909

寫歸併排序的時候感覺思路一點問題都都沒有,但是跑起來時就是下標越界異常,debug很久也沒用找到問題,最後通過比對大佬寫的**和我的**找出問題

public

static

void

mergersort

(int[

] arr, int begin, int end)

int mid =

(begin + end)

>>1;

mergersort

(arr, begin, mid)

;mergersort

(arr, mid, end)

;merger

(arr, begin, mid, end);}

private

static

void

merger

(int[

] arr, int begin, int mid, int end)

// 進行排序 ,當li = le時,排序完成

while

(li < le)

else

}}

其中 == if (arr[ri] < leftarray[li] && ri < re) == 為出錯點

應該將**修改為:

if ( ri < re && arr[ri] < leftarray[li]) {

原因:&&與&是有區別的,&&在前面的條件中錯誤時,將不再判斷後面的條件。所以不會造成下標越界異常。

歸併演算法 歸併排序

歸併演算法 歸併排序 這周需要用到歸併演算法,於是找了找相關的資料,整理如下 歸併排序 merge sort 是利用 歸併 技術來進行排序。歸併是指將若干個已排序的子檔案合併成乙個有序的檔案。兩路歸併演算法 1 演算法基本思路 設兩個有序的子檔案 相當於輸入堆 放在同一向量中相鄰的位置上 r low...

歸併排序演算法

include stdafx.h include include include 合併兩段已經排好序的列表 void merge int list int mergelist int left int mid int right else if i mid else 將列表list按照seglen分...

歸併排序演算法

這個演算法感覺比插入難理解一些,下面說說我的理解 歸併排序的步驟 1.把長度為n的序列分為兩個長度為n 2的子串行 2.對這兩個子串行分別採用歸併排序 3.將兩個子串行合併成乙個最終的排序序列 通過步驟2可看到 在歸併排序中又用了歸併排序,可見這是乙個遞迴的過程。例如乙個陣列 a 8 下面採用遞迴排...