package sort; /** * Created by ozc on 2018/3/19. * * @author ozc * @version 1.0 */ public class MergeSort { public static void main(String[] args) { /*int[] arrays = {9, 2, 5, 1, 3, 2, 9, 5, 2, 1, 8}; sort.MergeSort(arrays, 0, arrays.length - 1); System.out.println("å ¬ä¼å·ï¼Java3y" + arrays);*/ System.out.println("Hello World"); } /** * å½å¹¶æåº * * @param arrays * @param L æåæ°ç»ç¬¬ä¸ä¸ªå ç´ * @param R æåæ°ç»æåä¸ä¸ªå ç´ */ public static void mergeSort(int[] arrays, int L, int R) { //å¦æåªæä¸ä¸ªå ç´ ï¼é£å°±ä¸ç¨æåºäº if (L == R) { return; } else { //åä¸é´çæ°ï¼è¿è¡æå int M = (L + R) / 2; //å·¦è¾¹çæ°ä¸æè¿è¡æå mergeSort(arrays, L, M); //å³è¾¹çæ°ä¸æè¿è¡æå mergeSort(arrays, M + 1, R); //åå¹¶ merge(arrays, L, M + 1, R); } } /** * åå¹¶æ°ç» * * @param arrays * @param L æåæ°ç»ç¬¬ä¸ä¸ªå ç´ * @param M æåæ°ç»åéçå ç´ * @param R æåæ°ç»æåçå ç´ */ public static void merge(int[] arrays, int L, int M, int R) { //å·¦è¾¹çæ°ç»çå¤§å° int[] leftArray = new int[M - L]; //å³è¾¹çæ°ç»å¤§å° int[] rightArray = new int[R - M + 1]; //å¾è¿ä¸¤ä¸ªæ°ç»å¡«å æ°æ® for (int i = L; i < M; i++) { leftArray[i - L] = arrays[i]; } for (int i = M; i <= R; i++) { rightArray[i - M] = arrays[i]; } int i = 0, j = 0; // arraysæ°ç»ç第ä¸ä¸ªå ç´ int k = L; //æ¯è¾è¿ä¸¤ä¸ªæ°ç»çå¼ï¼åªä¸ªå°ï¼å°±å¾æ°ç»ä¸æ¾ while (i < leftArray.length && j < rightArray.length) { //è°æ¯è¾å°ï¼è°å°å ç´ æ¾å ¥å¤§æ°ç»ä¸,ç§»å¨æéï¼ç»§ç»æ¯è¾ä¸ä¸ä¸ª if (leftArray[i] < rightArray[j]) { arrays[k] = leftArray[i]; i++; k++; } else { arrays[k] = rightArray[j]; j++; k++; } } //å¦æå·¦è¾¹çæ°ç»è¿æ²¡æ¯è¾å®ï¼å³è¾¹çæ°é½å·²ç»å®äºï¼é£ä¹å°å·¦è¾¹çæ°æå°å¤§æ°ç»ä¸(å©ä¸ç齿¯å¤§æ°å) while (i < leftArray.length) { arrays[k] = leftArray[i]; i++; k++; } //妿å³è¾¹çæ°ç»è¿æ²¡æ¯è¾å®ï¼å·¦è¾¹çæ°é½å·²ç»å®äºï¼é£ä¹å°å³è¾¹çæ°æå°å¤§æ°ç»ä¸(å©ä¸ç齿¯å¤§æ°å) while (j < rightArray.length) { arrays[k] = rightArray[j]; k++; j++; } } }