程序员补课笔记(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;
    }
  }

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

三谈多态——善用virtual

三谈多态——善用virtual作者:Nicrosoft(nicrosoft@sunistudio.com) —— 2002.4.30出处:东日软件开发网络(SSDN) http://www.ssdn....
  • Nicrosoft
  • Nicrosoft
  • 2002-05-08 10:18:00
  • 1314

程序员考试补课笔记,程序员考试补课笔记

  • 2009年10月26日 17:13
  • 47KB
  • 下载

程序员考试补课笔记.doc

  • 2009年03月27日 21:14
  • 220KB
  • 下载

程序员考试补课笔记

  • 2008年03月24日 20:39
  • 160KB
  • 下载

信息补课(总结)

                                    FZ Day——  福州的课程结束了,接下来就开始总结。   第一天:  首先,第一题,当然先要For循环,正所谓一套For语句...
  • qq_40706922
  • qq_40706922
  • 2018-02-28 08:13:41
  • 38

程序员考试补课笔记(doc格式)

  • 2008年11月02日 18:01
  • 175KB
  • 下载

程序员补课笔记(11)

今天讲到结构体,在讲之前先把前天布置的几道针指的练习题先讲了。那些题目都是老潭书里的指针那章,大家自己慢慢做做喔,用来掌握指针很重要喔,学编程就是要多实践。今天我上网里看到了一篇很好的文章,我帖下来:...
  • cxmdtl
  • cxmdtl
  • 2004-08-24 01:22:00
  • 523

程序员考试 程序员补课笔记

  • 2010年06月04日 23:45
  • 159KB
  • 下载

程序员补课笔记(8)

今天回到学佼也没有讲课,因为老师忙着一些其它事,听说好像是多媒体比赛的吧,要今天上交了。那我们只好回到课室里自己看书了,不过在这段时间里我们都没有看什么书,只是大家聊了起来。我也插了嘴吹了几句,可是很...
  • cxmdtl
  • cxmdtl
  • 2004-08-24 01:20:00
  • 574

程序员补课笔记(9)

今天终于到了C语言的核心部份了,指针一直都是被学习C语言公认为最难的一个大重点了,如果假如我们不学C语言的指针的话,那我们可以说根本没有学过C语言了。不过话说回来,在我刚开始接触C的时候前面的基本语法...
  • cxmdtl
  • cxmdtl
  • 2004-08-24 01:21:00
  • 566
收藏助手
不良信息举报
您举报文章:程序员补课笔记(15)
举报原因:
原因补充:

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