合并排序
合并排序:
合并排序算法是用来分治策略实现对n个元素进行排序的算法,其基本思想是:将待排序元素分成大小大致相同的两个子集合,
分别对两个子集合进行排序,最终将排好序的子集合并成要求的排好序的集合。
递归实现如下:
package com.KingLong; import java.util.Scanner; public class Main { static final int MAX = 10005; static int num[] = new int[MAX]; static int temp[] = new int[MAX]; public static void main(String []args) { Scanner cin = new Scanner(System.in); while(cin.hasNext()) { int N = cin.nextInt(); Init(N); for(int i = 0; i < N; i++) { num[i] = cin.nextInt(); } MergeSort(0,N); for(int i = 0; i < N; i++) { System.out.print(num[i] + " "); } System.out.println(); } } static void MergeSort(int left,int right) { if(left+1 == right) { return; } int middle = left+(right-left)/2;//右端点不能取。 MergeSort(left,middle); MergeSort(middle,right); Merge(left,middle,right); } static void Merge(int left,int middle,int right) { int i = left; int j = middle; int a = left; while(i < middle || j < right) { if(i == middle) { temp[a++] = num[j++]; } else if(j == right) { temp[a++] = num[i++]; } else if(num[i] <= num[j]) { temp[a++] = num[i++]; } else { temp[a++] = num[j++]; } } for(i = left; i < right; i++)//很重要的一步 { num[i] = temp[i]; } } static void Init(int N) { for(int i = 0; i < N; i++) { temp[i] = 0; } } }
非递归实现如下:方法自个考虑,其实实现起来很简单。