zoukankan      html  css  js  c++  java
  • 基本算法(一):插入排序,归并排序

    基础的排序的算法:

    插入排序, 归并算法

    插入排序:

    package alg;
    
    import java.util.Arrays;
    
    /**
     * @author zha 插入排序,基础的算法 算法复杂度为O(n2)
     */
    public class InsertSort {
    
        public static void main(String[] args) {
            int[] array = { 5, 2, 4, 6, 1, 3, 23, 434, 55, 6, 788, 89, 0 };
            insertSort(array, 0, array.length);
            System.out.println(Arrays.toString(array));
        }
    
        public static   <T extends Comparable<T>> T[] insertSort(T[] array, int begine, int length) {
            // 插入排序要就插入前面的序列式有序的
            for (int i = begine + 1; i < length; i++) {
                 T key = array[i];
                int j = i - 1;
                for (; j >= begine; j--) {
                    if (array[j].compareTo(key) > 0){
                        array[j + 1] = array[j];
                    } else {
                        // 得到插入点的时候直接的跳出
                        break;
                    }
                }
                array[j + 1] = key;
            }
    
            return array;
        }
    
        public static int[] insertSort(int[] array, int begine, int length) {
    
            // 插入排序要就插入前面的序列式有序的
            for (int i = begine + 1; i < length; i++) {
                int key = array[i];
                int j = i - 1;
                for (; j >= begine; j--) {
                    if (array[j] > key) {
                        array[j + 1] = array[j];
                    } else {
                        // 得到插入点的时候直接的跳出
                        break;
                    }
                }
                array[j + 1] = key;
            }
    
            return array;
        }
    
    }

    归算法:

    package alg;
    
    import java.util.Arrays;
    
    /**
     * @author zha
     * 归并算法,重在思想
     */
    public class MergeSort {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            int[] array = { 5, 2, 4, 6, 1, 3, 23, 434, 55, 6, 788, 89, 0 };
            mergeSort(array, 0, array.length-1);
            System.out.println(Arrays.toString(array));
    
        }
    
        private static void mergeSort(int[] array, int start, int end ) {
    
            if(start < end){
                int mid = (start + end)>> 1;
                mergeSort(array, start, mid);
                mergeSort(array, mid+1, end);
                merge(array, start, mid,end);
            }
            
            
            
            
        }
    
        /**
         * 合并排序中合并的两端都是有序的,哨兵牌的使用
         * 哨兵的作用比较的不太好
         * */
        private static void merge(int[] array, int start, int mid, int end) {
            // 创建两个变量,用来存储中间的变量
            int firstl = mid - start+1;
            int secondl = end -mid;
            int[] first = new int[firstl +1];
            int[] second = new int[secondl+1];
            
            for (int i = 0; i < firstl; i++) {
                first[i] = array[start+i];
            }
            
            for (int i = 0; i < secondl; i++) {
                second[i] = array[mid +i +1];
            }
            
            first[firstl] = Integer.MAX_VALUE;
            second[secondl] = Integer.MAX_VALUE;
            
            int ii = 0 , jj =0;
            for (int pp = start; pp <= end; pp++) {
                if(first[ii] <= second[jj]){
                    array[pp] = first[ii];
                    ii++;
                }else{
                    array[pp] = second[jj];
                    jj++;
                }
            }
            
            
        }
    
    }
  • 相关阅读:
    HDU 2328 POJ 3450 KMP
    挨踢江湖之十八
    Solr4.2迁移到新项目下异常:java.lang.NoSuchMethodError: org.apache.http.conn.scheme.Scheme.<init>
    滚动条
    《取悦症》听书笔记
    《洞见远胜创意》听书笔记-如何获得洞见
    《乌合之众》听书笔记
    《巨人的工具》听书笔记
    程序员职业生涯规划
    2017第20周摘录
  • 原文地址:https://www.cnblogs.com/zhailzh/p/4093390.html
Copyright © 2011-2022 走看看