歸併排序,空間複雜度O 1 的實現

2021-10-01 02:59:46 字數 589 閱讀 1594

題目:陣列a,前面一段是l1,後面一段l2。兩個有序序列l1和l2,利用歸併排序的merge,將陣列a排序。要求:空間複雜度為o(1)

思路:利用原陣列a的空間,兩個下標i和j分別遍歷l1和l2。注意:當l2當前元素較小時,會覆蓋l1的元素。可以利用插入排序,將arr[j]插入到l1中。

程式c++實現:

#include #include using namespace std;

void print(int *arr, int start, int end)

void randdata(int *arr, int start, int end)

void merge(int *arr, int start, int mid, int end)

arr[k] = key;

++j;

} ++i; }}

void mergesort(int *arr, int start, int end) }

/*11 4 2 13 12 2 1 16 18 15*/

int main()

return 0;

}

歸併排序,空間複雜度O 1 的實現

思路 利用原陣列a的空間,兩個下標i和j分別遍歷l1和l2。注意 當l2當前元素較小時,會覆蓋l1的元素。可以利用插入排序,將arr j 插入到l1中。程式c 實現 include include using namespace std void print int arr,int start,in...

歸併排序空間複雜度O 1 的實現

正常的歸併排序是利用分治法,即分解,解決,合併 o n membery mergesort public void mergesort int nums private void helper int nums1,int b,int e void merge int nums1,int b,int ...

O 1 空間 的歸併排序

2.2 初始化 2.3 迭代 2.4 終止 三 實現 四 效能 歸併排序的主演算法 public void mergesort int t,int low,int high int mid low high 1 mergesort t,low,mid mergesort t,mid,high mer...