设为首页 加入收藏

TOP

谈谈笔试中会经常碰到的一类问题-排序算法
2014-11-24 01:40:38 来源: 作者: 【 】 浏览:7
Tags:谈谈 笔试 经常 碰到 一类 问题 排序 算法

今天谈谈笔试中会经常碰到的一类问题,也是平时编程中需要经常使用的一些技巧——排序算法问题。
排序算法种类不少,你能否对最基本的几种如数家珍,了然于胸?叫你一口气说出7中排序算法肯定是有难度的,而后要你说出每种排序算法的思想更是困难。今天就来说说怎样记住7种最基本的排序算法,并且我相信,记住之后,你永远也忘不掉。
用口诀来记东西是最快也是最不容易忘记,武侠秘籍尚且如此,排序算法也不例外。在我自学Java时,从马士兵那里学到一句口诀,非常有意思,叫:冒择路(入)兮(希)快归堆。怎样理解这句话呢?直译就是冒失的选择道路啊,你将很快入土,归堆就是入土为安了。拆开来理解呢,“冒”就是“冒泡”,“选”就是“选择”,“路(入)”就是“插入”,“兮(希)”就是“希尔”,“快”就是“快速”,“归”就是“归并”,“堆”还是“堆”,在每个词后面加上“排序”二字不就是我们常用的7种排序算法,而且基本上呈现出从易到难的排列。
口诀有了,还要配合招式对不?今天我们先来切磋一下第一招——冒。
“冒”字诀:冒泡排序(BubbleSort)应该最好理解了,水面是顶,最下面的水泡和自己上面的水泡比较,我比它大,我上浮,它下沉,否则我不动,它继续和上面的水泡比较,水泡越大,就越容易先浮出水面。
因为需要一个个比较,所以冒泡很慢,时间复杂度是O(n^2),但是冒泡排序可以优化:定义一个布尔值,初值为true,在外层循环中设为false,内层循环中有交换就设为true,如果整个内层循环结束都没有交换过水泡,则是还是false,说明排序已完成,无需再比较,可以退出整个循环体了。
C示例代码:
void bubbleSort(int a[],int n)
{
int i=n-1;bool change=true;
for(;i>=1&&change;–i)
{
change=false;
for(int j=0;j {
if(a[j]>a[j+1])
{
int nTemp=a[j+1];
a[j+1]=a[j];
a[j]=nTemp;
change=true;
}
}
}
}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Java开发工程师笔试题库之单选题 下一篇培训学校J2EE高级培训师面试题

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: