zoukankan      html  css  js  c++  java
  • 第二章 算法基础 思考题2-1

    package chap02;
    
    import static org.junit.Assert.*;
    
    import java.util.Arrays;
    import java.util.Random;
    
    import org.junit.Test;
    
    /***
     * 在归并排序中对小数组采用插入排序
     * 
     * @author xiaojintao
     * 
     */
    
    public class ques2_1 {
    
        /**
         * 归并排序算法
         * 
         * @param a
         * @return
         */
        static void mergeSortWithInsertSort(int[] a, int start, int end, int k) {
            if (start < end - k) {
    
                if (start < end - 1) {
                    insertSort(a, start, end);
                    System.out.println("diaoyongle");
                }
                int mid = (start + end) / 2;
                mergeSortWithInsertSort(a, start, mid, k);
                mergeSortWithInsertSort(a, mid, end, k);
                merge(a, start, mid, end);
            }
        }
    
        /**
         * 归并排序中将两个已经排序的序列合并
         * 
         * @param a
         * @param b
         * @return
         */
        protected static void merge(int[] n, int start, int mid, int end) {
            int[] l = Arrays.copyOfRange(n, start, mid);
            int[] r = Arrays.copyOfRange(n, mid, end);
            int i = 0;
            int j = 0;// j<mid-start
            int k = 0;// k<end-mid
            while (i < end - start) {
                if (j < mid - start & k < end - mid) {
                    if (l[j] < r[k]) {
                        n[i + start] = l[j];
                        j++;
                    } else {
                        n[i + start] = r[k];
                        k++;
                    }
                } else if (k < end - mid) {
                    n[i + start] = r[k];
                    k++;
                } else if (j < mid - start) {
                    n[i + start] = l[j];
                    j++;
                }
                i++;
            }
            // System.out.println(Arrays.toString(n));
        }
    
        /**
         * 插入排序算法,对序列中从start到end(不包含end)之间的序列插入排序 start<end
         * 
         * @param n
         * @return
         */
        static void insertSort(int[] n, int start, int end) {
            for (int j = start + 1; j < end; j++) {
                int k = n[j];
                int i = j - 1;
                while (n[i] > k) {
                    n[i + 1] = n[i];
                    i--;
                    if (i == start - 1)
                        break;
                }
                n[i + 1] = k;
            }
        }
    
    }
  • 相关阅读:
    二、有限状态机(FSM)
    一、同步状态机
    quartus ii 中文注释乱码解决办法
    基于FPGA的线阵CCD图像测量系统研究——笔记
    数据接口的同步方法
    Servlet和web服务器关系
    实现项目本地,测试,生产3套环境
    Tomcat--startup.bat文件
    Servlet--HttpUtils类
    Servlet--HttpSessionBindingListener接口,HttpSessionBindingEvent类
  • 原文地址:https://www.cnblogs.com/xiaojintao/p/3768746.html
Copyright © 2011-2022 走看看