題目:陣列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...