美文网首页
培训第十四天----多文件,选择排序和快速排序

培训第十四天----多文件,选择排序和快速排序

作者: 穹蓝奥义 | 来源:发表于2016-12-23 17:14 被阅读0次

    昨日回顾:

    双链表头插尾插头删尾删
    文件的属性
    栈,堆,队列

    索引结点,文件描述符
    文件属性:12种

    r:文件必须存在
    w:文件存在,则新建文件覆盖原文件。若不存在,新建
    a:文件必须存在。
    +:r + w
    

    FILE *p 注意文件是否打开成功。
    打开/关闭文件fopen()/fclose()
    文件操作函数
    字符读写 fgetc()/fputc()
    字符串读写 fgets()/ fputs()
    格式化读写 写fprintf()/ 读fscanf()
    块读写 写fread()/ 读fwrite

    fread(adress,size,count,fp);    //别忘了&
    fwrite(adress,size,count,fp);
    
    段错误(内存错误):

    指针:
    常量指针/NULL/野指针
    数组的越界
    内存不足 双释放 内存泄露
    递归层次太深

    malloc()/free() 成对出现

    =====================================

    1.多文件

    (1)文件的包含:

    标准库的头文件 用<>括起来 .h 为头文件

        #include<stdio.h>
    
    自定义头文件:

    一般用""括起来;为了区分库的头文件,编译器的查找路径为当前工作路径。
    区别就是效率问题。
    static 函数只限于本函数调用。

    (2)多文件

    便于项目管理,可根据个人需求或项目需求将项目划分为不同的文件。
    有利于提高开发效率。
    编译时:

    gcc file1 file2 file3 ... -o file
    

    可以将多个文件存放于不同的目录中,编译时找路径。

    源文件--->src目录
    头文件--->include目录
    可执行文件--->bin目录
    

    (3)自定义头文件

    xxxx.h
    

    自定义头文件包含:函数声明,库的头文件,自定义的其他头文件,结构体,宏定义。
    全局变量不建议定义在自定义头文件里,造成效率底下,若该头文件在项目中的多文件中包含则会导致重复定义。

    (4)调用全局变量:

    在文件1.c中定义的全局变量,若在其他文件中使用:
    1.在其他文件中使用extern声明该全局变量
    2.将此文件1.c包含到其他文件中。

    (5)assert()函数

    #include<assert.h>
    

    断言,一般用于代码调试,碰到此处,程序会终止运行,并给出错误的地方!

    (6)注意事项:

    双目运算符: + - * / += -= *= /= >= <= 等双目运算符
    前后要加空格

    a + b = c;
    a += b;
    a >= b;
    

    单目运算符不需要加空格。

    空格,空行的使用:

    紧密相连的代码不需要加空行。
    不同代码模块之间加空行。

    注释的使用:应避免歧义。
    循环效率:
    for(i=0; i<=10; i++)    //两步判断<和=
    for(i=0; i<11; i++) //效率更高点
    

    2.选择排序 从头或从尾选

       11      8         25     16      9 
    arr[0]  arr[1]  arr[2]  arr[3]  arr[4]
    

    =========================================================

             8       25     16      9
           arr[1]   arr[2]  arr[3]  arr[4]  依次比较(较小数)
       11
    arr[0]
    
             11     25      16      9
           arr[1]   arr[2]  arr[3]  arr[4]  依次比较(较小数)
       8
    arr[0]
    

                      25        16        9
                     arr[2] arr[3]  arr[4]  依次比较(较小数)
       8       11
    arr[0]  arr[1]
        
                       25        16       11
                     arr[2] arr[3]  arr[1]  依次比较(较小数)
       8       9
    arr[0]  arr[1]
    

                                 16      11
                                arr[3]  arr[1]  依次比较(较小数)
       8       9      25 
    arr[0]  arr[1]  arr[2]  
                               25       11
                                arr[3]  arr[4]  依次比较(较小数)
       8       9       16
    arr[0]  arr[1]  arr[2]
                                  25        16
                                arr[3]  arr[4]  依次比较(较小数)
       8       9       11
    arr[0]  arr[1]  arr[2]
    

      11        8        9       16     25
    arr[0]  arr[1]  arr[2]  arr[3]  arr[4]
    

    3.数组传参

    数组名代表的是数组地址!!

    ===================================

    项目相关

    初级架构

    界面层:
    绘制界面
    获取数据--->用户的输入
    业务逻辑层:
    调用数据层函数,进行数据层和界面层的交互
    数据层:
    数据的增删改查
    读写文件---->

        读文件:文件--->链表(即创建链表)、
        写文件:链表--->文件
    

    .h:包含头文件和函数声明
    .c:函数功能实现和函数的调用*

    快速排序

    low指针,high指针,辅助指针

    快速排序

    第一数拿出,从末尾找比他小的值,放到首位
    从第二位开始找比他大的值,放到末尾。找到就继续,没找到则结束。
    继续循环末尾第二,第三位,两边交互着来。
    low指针,high指针,不能动

    i=low;      //辅助指针
    j=high;
    int middle = arr[0];    //为了记录中间参考值,防止掉失
    if(low<high)
    {
    while(i<j &&arr[j]>middle)
    j--;                  //底位比高位小,不用交换,指针后移
    if(i<j)
    arr[i]=arr[j];
    while(i<j&&arr[i]>middle)
    i++;
    if(i<j)
    arr[j]=arr[i];
    }
    arr[i] = middle;
    //再两分
    sort(arr,low,i-1);
    sort(arr,i+1,high);
    

    白话经典算法系列之六 快速排序 快速搞定

    排版25分钟

    相关文章

      网友评论

          本文标题:培训第十四天----多文件,选择排序和快速排序

          本文链接:https://www.haomeiwen.com/subject/vdskvttx.html