程序员考试笔记四:排序算法

企业动态 算法
程序员考试笔记。

真的不知道为什么,我所有WORD的日期都变了,可是是WORD的宏病毒吧。但是为什么感染上的呢?这下可真奇怪了,我没有用过宏啊。算了,现在没有时间去理会它了,我要抓紧时间写完这篇补习日记。

今天的课程里终于到了重点了,就是算法,因为才刚开始,先从容易的排序算法开始说,抄了一道题目让我们做,如下:

  已有一个已排序的数组,今输入一个数,要求按原来的排序规律将它插入数组中。

看到了这个题目我觉得自己比较有把握,很快的就写了出来,可是谁知道我的程序有一个至命的地方,刚给老师看的时候还得意洋洋,可是看完指出我的错来时真的不好受,既然都错了,就把我所做的那个答案写下来吧,也好让大家比较比较。

#define n 8
main()
{
  int a[n];
  int i,j,t,s;
  for(i=1;i<=7;i++)
    a[i-1]=i*10;
  for ( i=0;i < 7;i--)
    if ( a[ i ] < a[ i+1 ] )
    { s=a[ i ] ; a[ i ] = a[ i+1] ; a[ i+1] = s; }
    for(i=0;i<7;i++)
      printf("%d,a[ i ]);
}

  看上去真的对的,没有错误,可能如果不细心都走眼的了。老师就是有这种本领可以看出来,让我慢慢道来我的错误吧,其实就是错在那一个最后没有赋值的元素,因为没有初始传值,随机生成的数可能很大,也可能很少,不过如果刚好小于插入的数话,那么就不再是正确的排序了。好了,说了我的错让我们看一个正确的程序吧

#define N 8
main()
{
  int a[N]={20,30,40,50,60,70,80};
  int n,i;
  for(i=N-1;i>=0;i--)
  {
    if(n    else break;
  }
  a[i+1]=n;
}

  这里就是一个比较好的排序算法了,在讲这些排序的时候老师画了一个图,如第四天图一这个图可以方便的表示出当时的排序情况,排起序来更清晰了。不过更重要的一点就是不排让人只单独看源程序那样头晕,根本不知道这是怎么一回事。因为我也是,自己编这个程序的时候跟着看完,看得模模糊糊的,所以我推荐大家也学一学这种方法。

  说到排序,我们又教我们一种新的排序方法,就是冒泡排序法了。记得以前我学QB里也学过,不过今天听着老师说,自己动着手画图来看,真的变得清晰多了。说冒泡排序法其实也可以叫左下沉排序法,因为是按程序的两个循环来决定,如果是按从底到顶当然就是冒泡啦,相反从顶到底就是下沉了。显下两个程序:

int n=6,i,j;
for ( i=n-1; i > 0; i--)
  for(j=0; j < i; j++)
    if(a[j]>a[j+1] { 交换 };

以上的是冒泡法

int n=6,i,j;
for ( i=0; i < n; i++)
  for(j=n-1; j > i; j--)
    if(a[j]这就是下沉了。

  我们今天基本上全都在练习这个排序了,快到放学了,可是老师还是把握好时间,真的一点都不浪费啊,而且还拖了半个钟头堂。唉~!有时候我觉得他人好,好时候真的不好。可是怎么说呢,他至终都是我们的老师。那么他拖了我们半个钟就是为了说完C语言里条件语句,不过说真的还是学到了一些东西。

  C语言里条件语句也有好几种形式,用条件运算符 ? : ,基本的if语句,还有就是switch语句,至于最灵活都是答件运算符 ? : , 而且还是C语言里唯一的三目运算符了。为什么这么灵活,因为他的参数是表达式,C语言最灵活也就是表达式了,那么它能不灵活吗!这里给出一个源程序:

int a=5,b=10,c=8;
if(a>b)
if(a>c)printf("a";
else if(b>c)printf("b";
else printf("c";

  这么一条源程序是否让你看得不舒服呢,这就是C语言的另一个特点啊,你知道这条程序的答案吗?不过其实也不难,程序也很短嘛,就让我说出答案好了,答案不就是输出b嘛,道理很简单一看就出了,谁?谁?谁在这里搞乱,答案会是输出b 吗,笨!所以写你功夫还不到家嘛,下面让整理一下程序

int a=5,b=10,c=8;
if(a>b)
if(a>c)
  printf("a";
else
  if(b>c)printf("b";
else printf("c";

  这样看清楚了吗?答案就是什么都没有,因为一开始第一个if语句就不成立了,那里有答案出呢!这里也看出一个情况,所以我们要陪养好代码的格式,如果有良好的编码风格就有好的程序。还有我今日又明白了一样,想看看下面的if语句:

if if
else else if
if else if
else else if
if
else

  我原还以为这两个是不同的呢,在QB里的印象是两个不if语句呢。可是今天就给我弄明白了,大家也应该知道吧,可能就是我笨了。

  在C语言里swtich也和别的高级语言不同,你们有发现吗?现在看看第四天图二吧在这个图里清楚的说明了这个语句与其的不同之处,而且条件是用常量的,所以老师说给我们听他自己也不怎么喜欢用这个swtich语句。如果用懂了这个条件运算符? : 还真的挺方便的,这个也是可以无限嵌套的,这里不多说了,让自己慢慢体会研究。

【编辑推荐】

  1. 程序员考试笔记三:C语言运用
责任编辑:丁小雨 来源: 51cto
相关推荐

2009-01-16 19:49:49

程序员考试数组指针

2009-01-19 19:18:44

程序员考试笔记

2009-01-07 21:03:53

程序员循环语句

2009-01-08 21:25:51

程序员笔记

2009-01-10 23:38:16

程序员考试笔记

2009-01-08 21:21:45

程序员笔记

2009-01-05 15:56:00

软考程序员

2012-08-20 09:26:17

程序员算法排列算法

2014-07-01 09:43:55

程序员算法

2013-12-10 09:51:18

2021-09-04 23:40:53

算法程序员前端

2022-09-24 09:03:55

前端单元测试冒泡排序

2023-02-09 07:39:01

2021-11-10 09:17:18

程序员排序算法搜索算法

2018-06-04 12:41:50

程序员贪心算法分析

2019-01-21 14:13:51

程序员技能开发者

2020-11-25 10:40:58

程序员技能开发者

2021-01-19 15:59:14

程序员算法

2019-05-16 08:36:53

Eureka缓存网关

2015-04-08 10:57:15

程序员程序员四年经历
点赞
收藏

51CTO技术栈公众号