zoukankan      html  css  js  c++  java
  • 经典排序算法——归并排序

    归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。


    归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
    将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。


    链接:http://blog.csdn.net/morewindows/article/details/6678165


    public class Sort {
    	static final int MAX = 20;
    
    	public static void main(String[] args) {
    		int[] data = new int[MAX];
    		Random random = new Random();
    		// 生成一个随机数组
    		for (int i = 0; i < MAX; i++) {
    			data[i] = random.nextInt(MAX * MAX);
    		}
    		// 打印排序前数据内容
    		System.out.println(Arrays.toString(data));
    		
    		// 归并排序
    		mergsort(data, 0, MAX-1);
    		
    		// 打印排序后的数组
    		System.out.println(Arrays.toString(data));
    	}
    
    	static void mergsort(int[] data, int first, int last) {
    		if (first < last) {
    			int mid = (first + last) / 2;
    			mergsort(data, first, mid); // 归并数组的前一半 
    			mergsort(data, mid + 1, last); // 归并数组后一般
    			mergearray(data, first, mid, last); // 归并数组
    		}
    	}
    
    	static void mergearray(int[] data, int first, int mid, int last) {
    		int i = first;
    		int j = mid + 1;
    		int m = mid;
    		int n = last;
    		int k = 0;
    		int[] temp = new int[data.length];
    		
    		while (i <= m && j <= n) {
    			// 依次比较,选取最小的放入临时数组汇总
    			if (data[i] <= data[j]) {
    				temp[k++] = data[i++];
    			} else {
    				temp[k++] = data[j++];
    			}
    		}
    		// 如果还有没有比较的,则放在数组后面插入
    		while (i <= m) {
    			temp[k++] = data[i++];
    		}
    		// 如果还有没有比较的,则放在数组后面插入
    		while (j <= n) {
    			temp[k++] = data[j++];
    		}
    		// 复制到原始的数组中
    		for (i = 0; i < k; i++) {
    			data[first + i] = temp[i];
    		}
    	}
    }


  • 相关阅读:
    iframe 的自适应高度
    在repeater、datalist控件中使用分页功能
    多语言网站开发:不完全技术分析
    提高ASP.Net应用程序性能的十大方法
    使用ASP在线解压rar文件
    在C#程序设计中使用Win32类库
    FCKeditor 2.0 的设置.修改.使用
    Windows Server 2003 四种版本的区别
    在ASP中应用FCKeditor2.1.1
    获得汉字的拼音首字母源代码
  • 原文地址:https://www.cnblogs.com/liushuibufu/p/3253616.html
Copyright © 2011-2022 走看看