解題思路:
分解:將待排序分成兩部分,對每部分進行排序
合併:將排序好的部分進行合併
遞迴:
遞推公式:merge_sort(p..q) = merge(merge_sort(p..r),merge_sort(r+1..q))
終止條件:p>=q,分組中元素只剩下 1 個
演算法實現
public class solution
// 遞迴函式
public static void mergesort(int array, int start, int end)
int middle = (start + end) / 2;
// 分解
mergesort(array, start, middle);
mergesort(array, middle + 1, end);
// 合併 array[start..middle]~array[middle+1..end]
merge(array, start, middle, end);
}// 合併兩個有序陣列
public static void merge(int array, int start, int middle, int end) else
tempindex++;
}// 將剩餘元素均放入 temparray 中
while (index1 <= middle)
while (index2 <= end)
// 將 temp 陣列的有序元素放到 array 中
for (int i = 0; i < temparray.length; i++)
}public static void main(string args) ;
mergesort(array);
for (int i : array) }}
3分鐘學會氣泡排序
思路 兩個元素比較,大的放到右邊 從頭開始依次比較相鄰的兩個元素,目的是找出最大的乙個元素放到末尾,這個元素不再參與比較 第二次仍然從頭開始,把第二大的元素放到正確的位置 一共比較 len 1 趟,因為已經確定了 len 1 個元素的位置,那麼第 n 個肯定是最小的那個了 第 i 趟的比較次數為 l...
3 分鐘學會插入排序
思路 將待排元素插入到有序陣列中的合適位置,後邊的元素依次向後移動 將陣列分為有序與待排兩個區域 待排區從 1 開始,依次取出每個元素插入有序區,一共進行 n 1 趟 從有序區後面開始比較,有序元素 待排元素,有序元素則向後移動 實現public class solution else j 1 時,...
3分鐘學會sessionStorage用法
前言 是什麼需求呢?需求方要求使用者在乙個列表頁瀏覽時,點選乙個列表進入詳情頁,返回要求記錄使用者剛剛瀏覽的位置,而不是重新重新整理頁面到了頁面頂部。ps 如果使用者好不容易翻到了第幾 十 幾百乃至幾千條時,難道要使用者再重頭開始?可能這個時候跳出率就高了,這個分析的確挺有道理,無力反駁.那麼開始腦...