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

    这个学期学习算法,大一学过C,现在忘了好多,写起来很别扭,所以用java实现,首先上归并排序。

    import java.util.Scanner;
    
    /**
     * @author 段星星
     * 归并排序算法
     *
     */
    public class MergeSort {
    
     /**
    * @param a 从键盘输入int数字,存入
    * @param left 数组中待排序的部分的最左下标
    * @param right 数组中待排序的部分的最右下标
    */
    public static void mergeSort(int[] a ,int left , int right){
     
    if(left<right){
     
    int i = (left+right)/2;
    mergeSort(a, left, i);
    mergeSort(a, i+1, right);
    int[] b = new int[a.length];
    merge(a,b,left,i,right);
    copy(a,b,left,right);
    }
    }
    
    /**
    * @param a 待排序的数组
    * @param b 临时数组
    * @param left 数组中待排序的部分的最左下标
    * @param right 数组中待排序的部分的最右下标
    */
    private static void copy(int[] a, int[] b, int left, int right) {
    
    for(int i=0; i<b.length;i++){
    a[i]=b[i];
    }
    
    }
    
    
    /**
    * 合并两个已排序的子数组,按从小到大方式
    */
    private static void merge(int[] a, int[] b, int l, int m, int r) {
    
    
    int i = l, j = m+1,k=0;
    //从低位到高位依次比较两个数组,取出较小值放入b中
    while((i<=m)&&(j<=r)){
    if(a[i]<a[j]) b[k++] = a[i++];
    else b[k++] = a[j++];
    }
    //当有一方数组取完时
    if(i>m){ for(int q=j; q<=r; q++) 
    b[k++] = a[q++];}
     
    else {
    for(int q=i; q<=m; q++) 
    b[k++] = a[q++];
    
    }
    //把临时数组的未赋值部分用a数组赋值,以免不赋值部分等于0,等到赋值给a时丢失数据
    for(int t=k;t<a.length;t++){
    
    b[t]=a[t];
    }
    }
    
    
    public static void main(String[] args) { 
    
    //从键盘读入数据
    Scanner sc = new Scanner(System.in);
    
    int[] a = new int[3];
    int i =0;
    
    System.out.println("请输入要排序的int整数!");
    
    while(sc.hasNext()){
    a[i] = sc.nextInt();
    i++;
    if(i>=3)
    break;
    }
    sc.close();
    /*for(int j=0; j<a.length; j++){
    System.out.println(a[j]);
    }*/
    MergeSort.mergeSort(a, 0, 2);
    /*for(int aValue : a){
    System.out.println(aValue);
    }*/
    for(int j=0; j<a.length; j++){
    System.out.println(a[j]);
    }
    
    
    }
    
    
    }


  • 相关阅读:
    [转]给嵌入式系统工程师的十个建议
    About Career Links
    Oh My, JAVA?!
    All Maling-Lists
    ALSA Links
    [Music Links]
    [Android-Building]/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6.1/../../../liblzo2.so when searching for -llzo2
    Debugging for Unfortunately, the process android.process.media has stopped
    [Quote] How To Change, Customize & Create Android Boot Animation [Guide]
    Share folders on your local Windows PC to remote Linux PC
  • 原文地址:https://www.cnblogs.com/duanxingxing/p/6550643.html
Copyright © 2011-2022 走看看