記錄一下歸併演算法

2021-10-02 05:28:07 字數 2226 閱讀 9690

/**

* 歸併排序

* 這是採用分治法的一種典型應用

* 也就是分治替換的原則,對乙個序列進行分治,然後使其有序,

* 使其有序的關鍵便是對分組後的序列再次分治,一直如此到最後進行比較替換(遞迴)

* 然後歸併成乙個有序序列

* * 將2個序列進行比較交換的原理是採用雙指標方法,在開始的時候,同時指向2個序列的頭節點

* 然後預留出乙個2個序列之和的新序列用來存放新的有序資料集,一次如此,直到最後整個序列有序

* * 解答思路:

* 將n個元素從中間切開,分成兩部分。(左邊可能比右邊多1個數)

* 將步驟1分成的兩部分,再分別進行遞迴分解。直到所有部分的元素個數都為1。

* 從最底層開始逐步合併兩個排好序的數列。

* * 記住,我們規定的是比較的2個陣列都是有序的,意味著當我們分治到每個陣列為1個元素時,便是有序的。然後進行歸併

* * 歸併的優勢,時間複雜度小,為nlogn ,但是空間複雜度大,也就意味著比較佔記憶體

* ** @date 2020-01-07

* @since

*/public class mergesorttest ;

int sort = mergesort(arr, 0, arr.length - 1);

for (int num : sort)

}private static int mergesort(int arr, int l, int r) ;

}// 獲取分段索引下標

int segment = l + (r - l) / 2;

// 左邊有序的陣列,這裡採用遞迴呼叫就是為了分治到1個元素為止

int leftarr = mergesort(arr, l, segment);

// 右邊有序的陣列

int rightarr = mergesort(arr, segment + 1, r);

// 那麼如何保證有序呢?,因為我們分治的元素歸併後都保持有序,所以直接進行比較交換即可

// 採用雙指標來完成

int newarr = new int[leftarr.length + rightarr.length];

int k = 0;

int i = 0;

int j = 0;

// 歸併

while (i < leftarr.length && j < rightarr.length)

// 如果leftarr未排完,則直接插入到最後

while (i < leftarr.length)

while (j < rightarr.length)

return newarr;

}// public static int mergesort(int nums, int l, int h) ;

//// int mid = l + (h - l) / 2;

// int leftarr = mergesort(nums, l, mid); //左有序陣列

// int rightarr = mergesort(nums, mid + 1, h); //右有序陣列

// int newnum = new int[leftarr.length + rightarr.length]; //新有序陣列

//// int m = 0, i = 0, j = 0;

// while (i < leftarr.length && j < rightarr.length)

// while (i < leftarr.length)

// newnum[m++] = leftarr[i++];

// while (j < rightarr.length)

// newnum[m++] = rightarr[j++];

// return newnum;

// }

// public static void main(string args) ;

// int newnums = mergesort(nums, 0, nums.length - 1);

// for (int x : newnums)

// }

}

2020 06 07記錄一下

軟體測試技術型方向 自動化測試工程師,效能測試工程師,安全測試工程師等專項技術方發展 初級軟體測試人員專業知識 1 軟體功能測試技術,體現在用例設計和缺陷設計兩方面。主要包括軟體需求規格說明書的評審 測試計畫 測試用例設計技術 環境搭建 測試執行 缺陷提交 回歸測試 測試報告等。2 web自動化測試...

記錄一下進展

最近倆周都在除錯caffe的windows和matlab聯合使用,真的是超級鬱悶的一段時間。caffe編譯通過,但是目前有些不能用,當使用image data時,prototxt檔案解析失敗,我也不知道到底怎麼回事。另外乙個,在matlab呼叫caffe的mex檔案時,總是在初始化就失敗了。具體原因...

懷念一下歸併 逆序對

codevs 4163 神犇與逆序對 include define ll long long define maxn 1000010 using namespace std ll n,a maxn b maxn ans ll init returnx void merge sort ll l,ll ...