近日,老师带着学习算法,从最基础的,也是很重要的选择,交换排序开始学起,突然觉得算法的确妙不可言,而且它和生活也是可分的。排序算法有一大堆,先从选择和交换开始吧。
生活
说算法,先从生活说起。前日去饭店吃饭,很平时没有什么两样,挑着自己喜欢的菜品。最后到了付账的时候,前面有个大哥,那叫一个能吃,能数满了指头,足足要了将近10份菜。作为程序员的重头戏来了。我本想这算账应该慢了,毕竟菜挺多的,得一个一个算。想着的同时,那算账的大姐,毫不含糊,之见把几份菜左一摞,右一摞,不同菜价的菜都放到一块了。而不是我所想的把一个一个菜价往上加。噼里啪啦的就把菜的账结了。心里难过啊,这么简单的事情咋就想不到呢,要是我在这结账的话,老板肯定炒了咱的。
假设这个算账是代码的话,大姐的算法肯定要比我的快多了。不可否认,有一定因素是经验的问题,但是这个事情动动脑子就能够优化的啊。看来生活中的事是可以想象成代码的啊。
代码
毫无疑问还得回归咱的代码。先从交换和选择来说吧。在对这块代码学习的时候,老师提出了三角形的概念。今天算是对这个三角形理解了。下面是对小编对选择和交换的理解
无论选择还是交换也好,都是对一堆数来进行排序,准确的说是对无序数据排序。看对10个数进行排序,下标从0开始
选择排序
for (i=0;i<9;i++)
{
<span style="white-space:pre"> </span>for (j=i+1;j<=9;j++) //内循环的初始变量值越来越大,无序区长度越来越短
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>if(box[i]<box[j])
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>var tmp =box[i];
<span style="white-space:pre"> </span>box[i]=box[j];
<span style="white-space:pre"> </span>box[j]=tmp;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
}
交换排序(冒泡)
for(i=0;i<9;i++)
{
<span style="white-space:pre"> </span>for (j=0;j<=9-i;j++) //无序区长度越来越短,末尾变量的值越来越小
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>if (box2[j]<box2[(j+1)])
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>var tmp =box2[j];
<span style="white-space:pre"> </span>box2[j]=box2[(j+1)];
<span style="white-space:pre"> </span>box2[(j+1)]=tmp;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
}