小白成长日记

原创 2016年08月31日 14:36:46

写篇博文主要是试验一下csdn的博客功能,顺便记录一下学习的心酸历程。
看了大神的白话经典算法之归并排序的实现这里写链接内容
觉得应该记录一下,免得哪天又忘了。
归并排序是采用分治法的一个典型的应用,将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。
先贴出代码


public class Merge {
    void mergearray(int a[], int first, int mid, int last, int temp[])  
    {  
        int i = first, j = mid + 1;  
        int m = mid,   n = last;  
        int k = 0;  

        while (i <= m && j <= n)  
        {  
            if (a[i] <= a[j])  
                temp[k++] = a[i++];  
            else  
                temp[k++] = a[j++];  
        }  

        while (i <= m)  
            temp[k++] = a[i++];  

        while (j <= n)  
            temp[k++] = a[j++];  

        for (i = 0; i < k; i++)  
            a[first + i] = temp[i];  
    }  
    void mergesort(int a[], int first, int last, int temp[])  
    {  
        if (first < last)  
        {  
            int mid = (first + last) / 2;  
            mergesort(a, first, mid, temp);    //左边有序  
            mergesort(a, mid + 1, last, temp); //右边有序  
            mergearray(a, first, mid, last, temp); //再将二个有序数列合并  
        }  
    }  


    public static void main(String[] args) {
        Merge merge = new Merge();
        int a[] = new int[]{6,202,100,301,38,8,1};
        int p[] = new int[a.length];  
        merge.mergesort(a, 0, a.length - 1, p); 
        for(int i=0;i<a.length;i++){
        System.out.println(a[i]);
        }

    }

}

以前一直不理解递归的步骤,特意研究了一下,首先递归是一种大的思考,具体来看的话每次都是先执行左面,左面执行完再执行右面,在只有一个元素的时候就进行mergearray()的操作。
在时间复杂度方面,将数列分成若干个小份数列一共需要logN步,每步都有一个合并有序数列的步骤,故一共O(N*logN)。

版权声明:本文为博主原创文章,未经博主允许不得转载。

小白成长日记(15)--岛屿面积问题(算法设计--dfs深度优先搜索)

讲真,这道题光理解题目就花了15分钟,理解完之后发现自己在刚才的15分钟里像个傻子。不多说了,贴题目。题目描述: 若海域由一个主岛和一些附属岛屿组成,海域可由一个n×n的方阵表示,矩阵中的数字表示...

Android小白成长日记 1.我的第一个HelloWorld程序

经过将近一个星期的艰难摸索,终于写出了一个没有不在报错的HelloWorld程序,过程很艰辛,但完事开头难,跨过了第一之后的路才会变得更好走,加油,千里之行,始于足下 下面我来说说我学习中走...

jBPM 小白的学习日记

  • 2007年09月03日 08:37
  • 1.29MB
  • 下载

过了一年,再来回顾一下去年到现在,这一年多,作为初级前端小白的坎坷成长历程

【楔子】 先上个图,吐槽一下自己(其实内心好想笑的) 因为前两天刚写完一个demo(这里【链接】,打个广告先),然后就想把笔记什么找个站点记录一下(这个demo,就是我自己写的一个博客网站,但...

机器学习小白如何成长为业内专家?

原文链接:点击打开链接 摘要: 作者用了十八个月的时间从一个机器学习小白成长为业内专家,总结了一套属于自己的机器学习入门方法。 开头奉上云栖社区的礼物: 请收下这份关于人...

机器学习小白如何成长为业内专家?

在过去的一段时间内,我通过不断的深入学习,成长为一名不错的机器学习从业者。为此我接受了一个小时的访谈,以此来总结我学习的历程。学习机器学习主要有两种方法:理论机器学习方法和应用机器学习方法。 ...

小白的成长之路吧。。血泪史啊。

讲道理的话这是宝宝的第二份工作,毕业半年,第一个工作一个月半,第二份工作差不多。。七个月? 毕竟在学校期间只负责划水打酱油,每天就知道睡醒了打dota,在学校期间其实是没写过一行代码的。从我第一个工...

Linux小白成长记--linux入门准备

一开始去学习linux,我是拒绝的,因为xp系统用习惯了,不愿意去linux里面使用一大堆命令去完成事情,也不很愿意接触那些抽像的底层上的东西,可是后来,用上了linux后,竟也慢慢地喜欢上了它。网上...

小白如何成长为优秀的系统设计专家?

大学是体制内的单位,老师的来源无外乎本校留的,外面引进的,当然本校留的占绝大多数。留校的老师虽说是博士层次,但是在系统设计方面确不见得擅长,做过工程化项目的老师很少,大多是做做算法而已,可以说也是一群...
  • sujim
  • sujim
  • 2017年08月04日 12:40
  • 197

小白成长记——Android进阶之线程thread的两种实现

Android有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口。 创建线程: 1.继承Thread类: public class ThreadActivity ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:小白成长日记
举报原因:
原因补充:

(最多只允许输入30个字)