程序员补课笔记(15)

原创 2004年08月24日 01:26:00
今天续着上堂的查找一章,上回已经讲了顺序查找和二分查找,这两个都是经常用到的。还有一种是特别的查找方法就是散列表(这里说明一下,这个查找方法是有几种不同的名字的,杂凑表和哈希表)。因为这个可能讲起来会用很多时间,老师也没有细详的解说,只是举了一个相对的思想出来,如下:
  Ri   keyi
 a(0) = 20
 a(1) = 30
 a(2) = 40
 a(3) = 50    addr(Ri)=H(keyi)
           Ri=keyi/10-2 这个关系

  就是这样,它对不同的问题当然有不同的关系,只能只要知道这个思想就好了。教程里的查找也就是这三种了,现在开始讲排序了。排序相对查找来说多了很多的方法,我们之前也碰过好几种排序的方法了,就是前一章的二叉树排序就是了,还有很早之前讲过的冒泡排序,我想很多人都应该知道这个经典的排序了吧。现在下来要讲的是直接插入排序法,这种方法的优势在于已经排好序的结点插入一个新的结点,有顺序的这样就可以用到上章学过的折半查找就可以找到该插入的位置了。其实给出一个没有序的一排数组,可以把它划分为两大部份,一部份是已排好序的结点,而另一部分则是待插入的结点,这样就可以模拟这个算法了,看看第十五天图一
这里可以清楚看到整个的思路是如何的。下面我们就要用C语言来到描述这个排序算法了,一共有好种种版本,大家一个一个的对比看看,看谁的效率高。
  int a[10]={8,7,10,30,5,1,7,10,0,25};
  int I,j,k;
  for(i=1;i<n;i++)
  {
    for(t=e[i],j=i-1;j>=0 && t<e[j];j--)
      e[j+1]=e[j];
    e[j+1]=t;
  }

另一个

  for(i=1;i<=9;i++)
    for(j=0;j<=i-1;j++)
    {
      if(a[j]>a[i])
      {
        t=a[j];
        a[j]=a[i];
        a[i]=t;
      }
    }

再另一个

  for(i=1;i<n;i++)
  {
    k=a[i];
    for(j=i-1;j>=0;j--)
      if(k>a[j]) break;
      else a[j+1]=a[j];
    a[j+1]=k;
  }

  以前三个程序请大家自己分析,一定要自己动过脑去想。好了,难题终于又是到最后出来了,就是把这个排序的算法变为链表形式的,大家有没有想到呢?我们都急着笔去试了,可是最后还是不行,如果对于至前没有接触过这类型的是正常的情况,所有我们都没有做出来。下面看看老师写的程序好了:

前一些定义之类的略
  p=h->next;h->next=NULL;
  while(p)
  {
    if(p->data<h->data)
    {
      q=p->next;
      p->next=h;
      h=p;p=q;
    }
    else
    {
      q=h;r=q->next;
      while(r && p->data > r->data)
      {
        q=r;r=r->next;
      }
      q->next=p;p=p->next;
      q->next->next=r;
    }
  }

  今天我有些失落,可能是因为做题的事吧,反正整个人都不知道怎么的,不过我还是会坚持,我会继续加把劲,希望大家可以和我一齐努力吧!

给程序员推荐一些提高工作效率的工具

http://www.itjhwd.com/gcxytjyg/ 给程序员推荐一些提高工作效率的工具 一些高效的软件可以给我带来高效的工作效率。下面一些工具推荐给大家。欢迎补充 一、Xshe...
  • zdy0_2004
  • zdy0_2004
  • 2014年10月28日 22:08
  • 1182

黑马程序员学习笔记 Java的三大框架

如果做javaweb开发,spring是一定要学的,现在主流还是ssh,就是strurs+hibernate+spring,其中hibernate是持久层,用来持久化数据库操作的,如果不喜欢可以学点别...
  • Mr_April
  • Mr_April
  • 2015年07月03日 17:12
  • 1559

程序员的自我修养读书笔记

1.进程直接使用物理内存的坏处:第一、地址空间不隔离,一个进程可能改写另一个进程的数据,从而导致系统崩溃。第二、内存使用效率低,频繁的数据换入换出,效率低。第三、程序运行地址不稳定,每次重新装载的空闲...
  • Deep_l_zh
  • Deep_l_zh
  • 2016年06月26日 19:45
  • 2525

【好程序员笔记分享】——文件和目录处理

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 文件是Objective-C程序设计中是比较重要的一个概念。文件一般指存储在外部介质中的数据的...
  • likethesun121314
  • likethesun121314
  • 2015年04月18日 13:52
  • 304

黑马程序员:Hibernate基础知识

android培训、java培训
  • u012159707
  • u012159707
  • 2013年09月26日 15:42
  • 588

黑马程序员_学习笔记JAVA基础总结

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流!------- 1、方法重载 方法覆盖 重载:一个类中一种功能的多种实现方式,调用哪种实现...
  • qq_27123965
  • qq_27123965
  • 2015年04月19日 14:39
  • 401

《程序员的自我修养》学习笔记之温故而知新

《程序员的自我修养》学习笔记之温故而知新。
  • zhouzxi
  • zhouzxi
  • 2016年12月08日 21:57
  • 2482

黑马程序员--Struts2复习笔记

--------
  • li951418089
  • li951418089
  • 2015年12月24日 10:26
  • 257

给程序员推荐一些提高工作效率的工具

一些高效的软件可以给我带来高效的工作效率。下面一些工具推荐给大家。 在日常的电脑操作中,我们常常花很多时间重复做着一件事情:退回桌面/开始菜单->寻找软件图标->点击启动。但如果你喜欢高...
  • truelove12358
  • truelove12358
  • 2015年08月27日 13:56
  • 779

【ECS】程序员如何打造属于自己的云笔记服务

摘要: 目录 前言 介绍 安装 启动服务 使用配置 APP访问 前言 在这个互联网知识呈爆炸增长的时代,作为一个程序员要掌握的知识越来越多,然再好的记性也不如烂笔头,有了笔记我们就是可以时常扒拉扒拉以...
  • qq_40954115
  • qq_40954115
  • 2017年11月27日 14:40
  • 208
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:程序员补课笔记(15)
举报原因:
原因补充:

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