新普金娱乐网址


天文邓嘉宛:《魔戒》是人类之前的历史

无关穹顶之下,关乎童年记忆

C基础 工程被常用的排序

  • 九月 17, 2018
  • 数学
  • 没有评论

引言 – 从太简便易行的插入排序开始

其三一直还不是单理论派的玩家,所以于乐理、学理方面的钻十分少。可是一直以来,这些题目总在我心中

  坏老很久以前, 也许还已学过那些常用的排序算法.
那时候看计算机算法还是来硌像数学.

动摇无失。

然脑海里时想同类问题,
那有什么用为(屌丝实践着对装逼学院派的深情鄙视). 不容许让你失去写.

近年来,大叔因缘际会又回头研究了学理。针对有些题材发出了不同想法,在此处跟大家大快朵颐一下以来底咀嚼和惊喜。

都卷入的那么好了. n年晚知道了碰, 学那是为着用之, 哪有什么目的,
有的是月落日升, 风吹云动~ _φ( °-°)/

只是,有只前提。这是自个人在习及之体悟,一桩业务发过多两样的面向,我之明只是千篇一律种植角度,不意味它是

   本文会举一些尽着排序所用的地方, 解析那些年因此过的排序套路, 
这里先来个插入排序

全盘纯粹的正确。只是想多供平等种角度的见还是想法。

// 插入排序
void 
sort_insert(int a[], int len) {
    int i, j;

    for (i = 1; i < len; ++i) {
        int tmp = a[i];
        for (j = i; j > 0; --j) {
            if (tmp >= a[j - 1])
                break;
            a[j] = a[j - 1];
        }
        a[j] = tmp;
    }
}

长久以来,一直在我心中的题材是 :

插入排序在小型数据排序中老常用! 也是链式结构首选排序算法.
插入排序超级进化 -> 希尔排序, O(∩_∩)O哈哈~.

  1. 胡而创五度围绕、四度围绕? 为什么不是三度六度过?

  2. 干什么 C 大调音阶中,五度音四度音会如此重要?

  3. 与弦行进为什么常动用 I – IV – V ?

unsafe code 很需要测试框架, 这里吧本文简单写了只测试套路如下

4.
为什么是完全四度、完全五度?为什么这片只比较协调?二度叔过六过七度却未是全音程?为何这几单相对不调和?

void array_rand(int a[], int len);
void array_print(int a[], int len);

//
// ARRAY_TEST - 方便测试栈上数组, 关于排序相关方面
//
#define ARRAY_TEST(a, fsort) \
    array_test(a, sizeof(a) / sizeof(*(a)), fsort)

inline void array_test(int a[], int len, void(* fsort)(int [], int)) {
    assert(a && len > 0 && fsort);
    array_rand(a, len);
    array_print(a, len);
    fsort(a, len);
    array_print(a, len);
}

// 插入排序
void sort_insert(int a[], int len);

#include <stdio.h>
#include <assert.h>
#include <stdlib.h>

#define _INT_ARRAY    (64)
//
// test sort base, sort is small -> big
//
int main(int argc, char * argv[]) {
    int a[_INT_ARRAY];

    // 原始数据 + 插入排序
    ARRAY_TEST(a, sort_insert);

    return EXIT_SUCCESS;
}

#define _INT_RANDC (200)
void 
array_rand(int a[], int len) {
    for (int i = 0; i < len; ++i)
        a[i] = rand() % _INT_RANDC;
}
#undef _INT_SORTC

#define _INT_PRINT (26)
void 
array_print(int a[], int len) {
    int i = 0;
    printf("now array[%d] current low:\n", len);
    while(i < len) {
        printf("%4d", a[i]);
        if (++i % _INT_PRINT == 0)
            putchar('\n');
    }
    if (i % _INT_PRINT)
        putchar('\n');
}
#undef _INT_PRINT

假若发生无不管,其长度也平米,可吹奏起 C大调 Do。OK这是第一只音。

单元测试(白盒测试)是工程质量的保险, 否则温馨都望而却步自己的代码.
软件功底2成在于测试功力是否到位.

范例1 第一泛音

顺带扯一点者出现系统随机函数 rand, 不妨再多说一样点,
下面是近期形容的48各类随机算法 scrand

当取一公尺律管 1/2 长度,使其效率倍增,这是强八度的C。OK这是次独音。

  scrand
https://github.com/wangzhione/simplec/blob/master/simplec/module/schead/scrand.c

范例2 次之泛音

她是于redis上拔掉下来好加工的肆意算法, 性能和随机性方面可比系统提供的使好.
最充分的急需是平台一致性.

当取一公尺律管 2/3 长度,我们沾 G音。这是第三单音。

来会单独开文扯随机算法, 水也坏深.
毕竟随机算法是计算机史上十非常重要算法, 排序也是.

范例3 第三泛音

  同开始介绍插入排序,  主要为了介绍系统放的混杂排序算法 qsort. qsort
多数兑现是

当取一公尺律管 3/4 长度,我们赢得 F音。这是第四单音。

quick sort + small insert sort. 那高速排序是什么法吧,
看如下一种高效落实

为什么不是沾其他长度?
我猜这是通过多前任反复试验后获取「相对悦耳的选取」。

// 快速排序
void sort_quick(int a[], int len);

// 快排分区, 按照默认轴开始分隔
static int _sort_quick_partition(int a[], int si, int ei) {
    int i = si, j = ei;
    int par = a[i];
    while (i < j) {
        while (a[j] >= par && i < j)
            --j;
        a[i] = a[j];

        while (a[i] <= par && i < j)
            ++i;
        a[j] = a[i];
    }
    a[j] = par;
    return i;
}

// 快速排序的核心代码
static void _sort_quick(int a[], int si, int ei) {
    if (si < ei) {
        int ho = _sort_quick_partition(a, si, ei);
        _sort_quick(a, si, ho - 1);
        _sort_quick(a, ho + 1, ei);
    }
}

// 快速排序
inline void 
sort_quick(int a[], int len) {
    _sort_quick(a, 0, len - 1);
}

每当范例2产, 2/3 长度(G音基础下) 再取 2/3,得到
D音;聪明的而早已想到,那会发D音律管还得到2/3吧?是A音;A音长度律管再取
2/3乎?是E音…接着是F#

这里科普一下为底把 _sort_quick_partition 单独包装出来. 主要缘由是
_sort_quick 是独递归函数,

范例2因2/3取音方式来C G D A E B F#
这几只音。这吗与我们熟悉的五度围一样。

占据系统函数栈, 单独分出, 系统占用的栈大小小一点. 薄提高安全性.
看到此, 希望下遇到别人

范例3不止取用3/4尺寸则会获得 C F Bb Eb Ab Db
Gb。有觉悟的发吗?喔,原来3/4
取音可以取得钢琴上黑键那些音。这取音顺序吧是咱们所谓的四度圈。

聊基础也克聊几句了,  高效的操作多数凡是许环境要多艺术的组合取舍.
突然觉得我们尚会翻~

自然音阶(Diatonic Scale)的生

 

C到G是协调的五度音程,同时也是以情理及容易给发觉的泛音音程。透过五度的商事模进,找来后面就几乎独音。接着将她们调整暨一个八度内,便起了
C D E F# G A B 这七只音。

前言 – 来只奇怪的积排序

由于最后出的 #F共鸣效果弱,故使F音取代的。那便是我们绝熟悉的 C D
E F G A
B。不包含其他升降记号。其实自然音阶一点啊非自,它是人造选择后的结果。

   堆排序的笔触好巧妙, 构建二叉树’记忆’的属性来处理排序过程中的稳步性.
它是冒泡排序的顶尖进化. 

无异于八度内不同律管长度有不同律音

归根结底的覆辙可以作为下面这样翻来覆去组索引 [0, 1, 2, 3, 4, 5, 6, 7, 8] – >

当发现音律过程,如果用不同长短会发生差音律,以长1律管发出声音为C的Do, 其他长度会发出不同之音律,诸如
:

0, 1, 2 一个二叉树, 1, 3, 4 一个二叉树, 2, 5, 6一个二叉树, 3, 7, 8
一个栽培枝.  直接看代码, 感悟以前神的心志

8/9 Db(小二度)、7/8 D(大二度)、6/7 Eb(小三度)、4/5 E(大三度)、3/4
F(完全四度)、2/3 G(完全五度)、3/5 A(大六度)…

// 大顶堆中加入一个父亲结点索引, 重新构建大顶堆
static void _sort_heap_adjust(int a[], int len, int p) {
    int node = a[p];
    int c = 2 * p + 1; // 先得到左子树索引
    while (c < len) {
        // 如果有右孩子结点, 并且右孩子结点值大, 选择右孩子
        if (c + 1 < len && a[c] < a[c + 1])
            c = c + 1;

        // 父亲结点就是最大的, 那么这个大顶堆已经建立好了
        if (node > a[c])
            break;

        // 树分支走下一个结点分支上面
        a[p] = a[c];
        p = c;
        c = 2 * c + 1;
    }
    a[p] = node;
}

// 堆排序
void 
sort_heap(int a[], int len) {
    int i = len / 2;
    // 线初始化一个大顶堆出来
    while (i >= 0) {
        _sort_heap_adjust(a, len, i);
        --i;
    }

    // n - 1 次调整, 排好序
    for (i = len - 1; i > 0; --i) {
        int tmp = a[i];
        a[i] = a[0];
        a[0] = tmp;

        // 重新构建堆数据
        _sort_heap_adjust(a, i, 0);
    }
}

其它的音律也都得以经不同长短律管来吹奏起相对音程乐音。

堆放排序单独讲同样省, 在于它们以基础件开发使用被生广泛.
例如有些定时器采用小顶堆结构实现,

可是,
很直觉的推理,你是一个远古时代人,你没事儿特别工具,要拿律管变短,你会举行的首先只挑选是?
合理的选是分先两相当于分也即是 范例1 , 再来划分三相当分 范例
2(产生五度音程), 再来分四等分 范例
3(产生四度音程)。你究竟不会见雷同开始便选用1/π这种鬼长度吧?

飞获得最近用实行的结点. 堆结构为得以用来外排序.
还有堆在拍卖范围外极值问题特别有效.

俺们又回头来探正那些疑问 :

后我们会以堆排序来拍卖个非常文件外排序问题.

  1. 怎而创造五度圈、四度圈? 为什么不是三度六渡过?

  2. 为什么 C 大调音阶中,五度音四度音会如此重大?

  3. 同弦行进为什么常采用 I – IV – V ?

/*
 问题描述:
      存在个大文件 data.txt , 保存着 int \n ... 这种格式数据. 是无序的.
 目前希望从小到大排序并输出数据到 ndata.txt 文件中

 限制条件: 
      假定文件内容特别多, 无法一次加载到内存中.     
      系统最大可用内存为 600MB以内.
 */

4.
为什么是了四度、完全五度?为什么这半只比较和谐?二度叔过六过七度却非是一心音程?为何这几单相对不调和?

 

要是能答了四度、完全五度为什么比和谐,基本上其他的题材啊就还多能应对了。

恰文 – 来个实在的外排序案例

故此最好基本的题材其实应当是这么描述 :以长1律管啊基准音,为什么2/3
律管的五度音程,比打 7/8(大二度)、6/7(小三度)等这些音程相对和谐?

  这里不妨来解决地方这个题材, 首先是构建数据. 假定’大数据’为 data.txt.
一个 int 加 char 类型,

干什么五度音会高有?为何相对和谐?

再次输出 1<<28不好, 28个 -> 1.41 GB (1,519,600,600 字节) 字节.

此问题时有发生几栽角度来诠释(未必正确,包含我之猜测,欢迎各位一起探讨)。

#define _STR_DATA        "data.txt"
// 28 -> 1.41 GB (1,519,600,600 字节) | 29 -> 2.83 GB (3,039,201,537 字节)
#define _UINT64_DATA    (1ull << 28)

static FILE * _data_rand_create(const char * path, uint64_t sz) {
    FILE * txt = fopen(path, "wb");
    if (NULL == txt) {
        fprintf(stderr, "fopen wb path error = %s.\n", path);
        exit(EXIT_FAILURE);
    }

    for (uint64_t u = 0; u < sz; ++u) {
        int num = rand();
        fprintf(txt, "%d\n", num);
    }

    fclose(txt);
    txt = fopen(path, "rb");
    if (NULL == txt) {
        fprintf(stderr, "fopen rb path error = %s.\n", path);
        exit(EXIT_FAILURE);
    }

    return txt;
}

其一、音律发现经过的客观长度选择先级。为即是眼前提及的,合理吧我们见面预先选分点儿顶分、三顶分、四顶分……所以「最先」被发觉的音程顺序是八度音、五度音、四度音。这吗成和谐音程的前头三称为。

上述就是是数额构建了程. 要多深仅需要调宏大小. 太非常时间有些长.
处理问题之笔触是

那、熟悉感与美感的混合错觉。咱俩当臭豆烂皮蛋好吃,有些外国人认为恶心。这其实就是饮食习惯所招的美味偏好。因为咱们常吃我们习惯了,我们尽管看它是香。事实上感官的爱好没绝对合理,它于习惯影响特别死。所以先发生的八度五度四

    1. 数据切割成合适份数N
    2. 每份内排序, 从小到大, 并输出到特定文件中
    3. 采用N大小的小顶堆, 挨个读取并输出, 记录索引
    4. 那个索引文件输出, 那个索引文件输入, 最终输出一个排序好的文件

度音最受纳吗协调音程有夫「先行者优势」逻辑。

第一步操作切割数据, 分别保存于一定序列文件中

老三、站在律制角度。一个音律可以代表也F(n1,n2,……)=g(n1,n2,……)F0n属于
z不同之函数对诺不同之律制,由「参数」n1,n2
等参数化…大叔不是数学系的,上面立段式网络及看到的,原则达成基本上理论及,站于律学角度,先有了五度过相生律,在产生12平均律。五度相较和谐之数学论点是
: 五度音程的频率比较都是发生理数。

#define _INT_TXTCNT    (8)

static int _data_txt_sort(FILE * txt) {
    char npath[255];
    FILE * ntxt;
    // 需要读取的数据太多了, 直接简单监测一下, 数据是够构建完毕
    snprintf(npath, sizeof npath, "%d_%s", _INT_TXTCNT, _STR_DATA);
    ntxt = fopen(npath, "rb");
    if (ntxt == NULL) {
        int tl, len = (int)(_UINT64_DATA / _INT_TXTCNT);
        int * a = malloc(sizeof(int) * len);
        if (NULL == a) {
            fprintf(stderr, "malloc sizeof int len = %d error!\n", len);
            exit(EXIT_FAILURE);
        }

        tl = _data_split_sort(txt, a, len);

        free(a);

        return tl;
    }

    return _INT_TXTCNT;
}

What? 什么是来理数?
那便是「说不清」的往往,因为「有理说不清」。有理数包含整数(正负整数)、分数(有限小数循环小数)。其实数学与乐随即简单山头学问来特别高关联性。像毕达哥拉斯、伽利略、克卜勒、牛顿、莱不尼兹这些人口以音乐史上可是还是起曰得大。很为难想象音乐与数学这简单种东西在大时代就是如是现代人的手机和钱包,香烟和打火机,知识之界限其实并无像我们想象的那样,如果您真对某些问题感兴趣,你见面明白,知识探究是从未边界的!

切割成八卖, 每卖也尽管好像200MB. 完整的构建代码如下

更何况回来,由于五度音程四度音程相对和谐,所以于取出自然音阶后,五度音属音、四度音下属音成了无以复加要害的蝇头只音。

图片 1图片 2

每当与弦行进上,由于五度音程四度音程的和谐度,所以I-IV-V成为了十分广阔惯用的和弦行进基础。

// 堆排序
void sort_heap(int a[], int len);

// 返回分隔的文件数
static int _data_split_sort(FILE * txt, int a[], int len) {
    int i, n, rt = 1, ti = 0;
    char npath[255];
    FILE * ntxt;

    do {
        // 得到数据
        for (n = 0; n < len; ++n) {
            rt = fscanf(txt, "%d\n", a + n);
            if (rt != 1) {
                // 读取已经结束
                break;
            }
        }

        if (n == 0)
            break;

        // 开始排序
        sort_heap(a, n);

        // 输出到文件中
        snprintf(npath, sizeof npath, "%d_%s", ++ti, _STR_DATA);
        ntxt = fopen(npath, "wb");
        if (NULL == ntxt) {
            fprintf(stderr, "fopen wb npath = %s error!\n", npath);
            exit(EXIT_FAILURE);
        }
        for (i = 0; i < n; ++i)
            fprintf(ntxt, "%d\n", a[i]);
        fclose(ntxt);
    } while (rt == 1);

    return ti;
}

四度音程它比较特别,它和大三度半音差距让其具有
“类导音”功能,而生听觉倾向大三度音的FU。另一方面,又于「级进预期心理」影响,它同时闹于五度前进力道。

View Code

咦为「级进预期心理」?
当有人和你说「恭喜发财」,你晤面就说「红包拿来」,就算你无说,你竟敢否认你内心发生想到「红包拿来」?
YES, 这虽是意料心理。

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>

//
// 大数据排序数据验证
//
int main(int argc, char * argv[]) {
    int tl;
    FILE * txt = fopen(_STR_DATA, "rb");

    puts("开始构建测试数据 _data_rand_create");
    // 开始构建数据
    if (NULL == txt)
        txt = _data_rand_create(_STR_DATA, _UINT64_DATA);

    puts("数据已经到位, 开始分隔数据进行排序");
    tl = _data_txt_sort(txt);
    fclose(txt);

    // 这里分拨的数据构建完毕, 开始外排序过程

    return EXIT_SUCCESS;
}

季级以想向五层,又想转头三级,使得C大调四级与弦具备「发散」特质,或说左右摇摆,它既安静而休那么平稳。

实行方切割代码, 最终生成会得到如下数据内容

当级进到五层之后,因为五度音程是极端和谐音程,什么让最和谐?就是公晤面时时错过摸索他…所以
G就不行容易回到C,五度属「收敛作用」,有众所周知回到Root C 的效益。

图片 3

这种分散收敛的轮流图,使得歌曲获「前进能量」,而及时所谓的上扬能量,说通过了呢可大凡「恭喜发财」、「红包拿来」

1 – 8 _data.txt 数据是隔排序后输出数据.
随后载开始拍卖数量进行外散序输出最终结出文件.

的预想心理。

struct node {
    FILE * txi;    // 当前是那个文件的索引
    int val;    // 读取的值
};

// true表示读取完毕, false可以继续读取
static bool _node_read(struct node * n) {
    assert(n && n->txi);
    return 1 != fscanf(n->txi, "%d\n", &n->val);
}

// 建立小顶堆
static void _node_minheap(struct node a[], int len, int p) {
    struct node node = a[p];
    int c = 2 * p + 1; // 先得到左子树索引
    while (c < len) {
        // 如果有右孩子结点, 并且右孩子结点值小, 选择右孩子
        if (c + 1 < len && a[c].val > a[c + 1].val)
            c = c + 1;

        // 父亲结点就是最小的, 那么这个小顶堆已经建立好了
        if (node.val < a[c].val)
            break;

        // 树分支走下一个结点分支上面
        a[p] = a[c];
        p = c;
        c = 2 * c + 1;
    }
    a[p] = node;
}

struct output {
    FILE * out;    // 输出数据内容
    int cnt;    // 存在具体多少文件内容
    struct node a[];
};

// 数据销毁和构建初始化
void output_delete(struct output * put);
struct output * output_create(int cnt, const char * path);
// 开始排序构建
void output_sort(struct output * put);

#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <stdbool.h>

#define _INT_TXTCNT        (8)
#define _STR_DATA        "data.txt"
#define _STR_OUTDATA    "output.txt"

//
// 对最终生成数据进行一种外排序尝试
//
int main(int argc, char * argv[]) {
    // 构建操作内容
    struct output * put = output_create(_INT_TXTCNT, _STR_OUTDATA);

    output_sort(put);

    // 数据销毁
    output_delete(put);
    return EXIT_SUCCESS;
}

由五度与四度的协调,使得在谱写、编曲、和声、转调、代理各方面广泛应用,也不怕发生了五度圈与四度环绕了。

上述是拍卖的总流程, 对于构建与销毁部分显得在底下

相似针对五度圈四度环绕认知

void 
output_delete(struct output * put) {
    if (put) {
        for (int i = 0; i < put->cnt; ++i)
            fclose(put->a[i].txi);
        free(put);
    }
}

struct output * 
output_create(int cnt, const char * path) {
    FILE * ntxt;
    struct output * put = malloc(sizeof(struct output) + cnt * sizeof(struct node));
    if (NULL == put) {
        fprintf(stderr, "_output_init malloc cnt = %d error!\n", cnt);
        exit(EXIT_FAILURE);
    }

    put->cnt = 0;
    for (int i = 0; i < cnt; ++i) {
        char npath[255];
        // 需要读取的数据太多了, 直接简单监测一下, 数据是够构建完毕
        snprintf(npath, sizeof npath, "%d_%s", _INT_TXTCNT, _STR_DATA);
        ntxt = fopen(npath, "rb");
        if (ntxt) {
            put->a[put->cnt].txi = ntxt;
            // 并初始化一下数据
            if (_node_read(put->a + put->cnt))
                fclose(ntxt);
            else
                ++put->cnt;
        }
    }

    // 这种没有意义, 直接返回数据为empty
    if (put->cnt <= 0) {
        free(put);
        exit(EXIT_FAILURE);
    }

    // 构建数据
    ntxt = fopen(path, "wb");
    if (NULL == ntxt) {
        output_delete(put);
        fprintf(stderr, "fopen path cnt = %d, = %s error!\n", cnt, path);
        exit(EXIT_FAILURE);
    }
    put->out = ntxt;

    return put;
}

来好多书还是网络直达篇阐述,从C出发的五度音演进顺序吗:

基本排序算法 output_sort ,

C G D A E B F# C# G# D# A# F C

// 28 -> 1.41 GB (1,519,600,600 字节) | 29 -> 2.83 GB (3,039,201,537 字节)
#define _UINT64_DATA    (1ull << 28)

// 开始排序构建
void 
output_sort(struct output * put) {
    int i, cnt;
    uint64_t u = 0;
    assert(put && put->cnt > 1);

    cnt = put->cnt;
    // 开始构建小顶堆
    i = cnt / 2;
    while (i >= 0) {
        _node_minheap(put->a, cnt, i);
        --i;
    }

    while (cnt > 1) {
        ++u;
        // 输出数据, 并且重新构建数据
        fprintf(put->out, "%d\n", put->a[0].val);
        if (_node_read(put->a)) {
            --cnt;
            // 交换数据, 并排除它
            struct node tmp = put->a[0];
            put->a[0] = put->a[cnt];
            put->a[cnt] = tmp;
        }
        _node_minheap(put->a, cnt, 0);
    }

    // 输出最后文件内容, 输出出去
    do {
        ++u;
        fprintf(put->out, "%d\n", put->a[0].val);
    } while (!_node_read(put->a));

    printf("src = %llu, now = %llu, gap = %llu.\n", _UINT64_DATA, u, _UINT64_DATA - u);
}

因绕回到C了,回到原点,又正好把12半音全动了事,所以这么是千篇一律环,就受五度圈。倒回来走又变成四度圈。把五度缠与四度围绕写出来,弄在同步,有许多和声、转调、和弦代理等等都足以怎么用什么样好听……这就是为何被四度环抱五过环绕,或说怎么而采取四度圈五渡过环绕。

最终抱数码 output.txt

然感觉起来是 :
先有12只音了。有雷同天因在科学园区被面板砸到突然想到,啊!四度音五度音听起来特别和谐,是拖欠为个五度环来将合声系统优秀的系统化一下。这样实在是倒因为果。最先发的和谐五度音程,大家看它是结果。所以这样结果产生一个五度圈。

图片 4

纵使音律发现的历程来拘禁。是事先来「和谐了五度」、「和谐了四度」发生,才来音阶的来。五度音程、四度音程是创建音阶的素。

上述就咱们常叫面试过程被问及的死数据瞎搞问题, 一栽简陋的缓解方案.
当然事情远才刚刚开始!

音律发现经过我们深知,先出矣和谐五度音程,才有G的下一个音D,接着又用D为底蕴,我们才取得了产一个A音…

学生等面试吹一波感觉是可了~ 扯一点, 年轻时候多吹一点NB,
以后为就只能看在人家~

一齐五度、完全四度是无与伦比和谐的音程。所以这表示?代表当音符律动时候向上生得了五度过、上下完四度过移动是平安之是惬意的。

 

为投其所好转调、作曲、和声方便找使用,于是发展起五度圈与四度圈。

继记 – 等自我回家

就篇和不丰富,但为不到底少了。大叔见识浅薄,只是把自己看到的圈稍做分享。若有左,还向先进不吝指正。

  当我回家 
– http://music.163.com/\#/song?id=477890886

复多吉他资讯,知识,精彩视频,关注:吉他范儿

*  图片 5*

  最近大羡慕陈胜吴广, 未来深不可测. 假如我们还是直男癌,
一定毫无忘记有过之血气方刚 ~  

 

相关文章

No Comments, Be The First!
近期评论
    分类目录
    功能
    网站地图xml地图