学什么有钱途,互联网+时代这些行业紧缺IT人
学电脑 计算机培训 就到fun88网东莞金码学校 0基础学习 技能提...
女生做什么工作好?
不是每一个IT培训都如此权威 不是每一个课程都能18个月升级一次 不...
东莞fun88网是fun88网东莞地区的独家官网,培养了不少IT精英,主...
新春活动页
我们的老师齐集了专家、硕士、博士、高级讲师,他们不但拥有熟练的...
金码2018春季招生简章
语法是语言的特色,而算法却是灵魂
算法不分语言
入门的算法要数排序算法
今天的算法讲解将以c语言为例子将以下几个排序算法
1. 桶排序
2. 插入排序
3. 冒泡排序
4. 快速排序
首先给大家介绍一个最简单粗暴的排序算法
桶排序
桶排序要先知道要排序的数的范围
然后要这么多的桶去装这些可能出现数的次数
//这里的范围是0~999
int b[1000];
这个数组就是用来装出现次数的
然后输入数字,然后这个相应的桶的次数就加1
输出时遍历全部桶,然后桶的数字是几就输出几次这个数字
代码如下
#include
int main(){
int num;
//弄一个大桶装所有可能出现的数,用来记录每个数字出现的次数,桶的个数是可能出现的最大值
int b[1000]={0};
int i,j;
for(i=0;i<10;i++){
scanf("%d",&num);
//该数字出现次数+1
b[num]++;
}
for(i=0;i<1000;i++){
//桶有装有几个数就输出几次
for(j=0;
这方法够简单够粗暴吧
其实这方法还可以优化一下
我们虽然是知道范围,但输入的数的范围可能要比给出的范围少得多,这样的话遍历全部桶就很浪费时间了
所以我们可以找到输入数字的最大值和最小值,只需遍历最大值和最小值之间的桶就行了,因为其他桶都是0,不用输出所以代码就可以改为
#include
int main(){
int num;
//弄一个大桶装所有可能出现的数,用来记录每个数字出现的次数,桶的个数是可能出现的最大值
int b[1000]={0};
int max=0;
int min=1000;
int i,j;
for(i=0;i<10;i++){
scanf("%d",&num);
//该数字出现次数+1
b[num]++;
/ 到最大值,后面输出可以节省时间,最大值后面的桶都是0,也可以再找最小值,最小值前面的桶都是0
if(num>max){
max=num;
}
if(num
桶的编码对应的是它记录的数字然后有人就问如果有负数怎么办负数的话,把全部桶平移一下就好,输出时把桶的编码再减去平移值
比如范围是-10~9
可以开个数组int b[20];
输入的话就是b[num+10]++
输出的话printf(“%d “,i-10);
这个算法大概就是这样了,虽然说是简单,但是我们通常情况下是不知道确切的范围的,如果以最大范围去开辟桶就会很浪费空间然后接下来讲第二种算法插入排序插入排序的基本思想是,从第二个数开始,插入到前面有序序列的位置
比如说3个数,分别是5,4,2
然后从第二个数开始
4比5小,应该插到5的前面
然后5后退一位
现在的序列编程4,5,2然后到第三个数2
2应该插到4前面
所以4和5都要后退一位
现在就变成2,4,5的有序序列了具体代码是这样#include
int main(){
int a[1000];
int b;
int i;
for(i=0;i<10;i++){
scanf("%d",&a[i]);
//还可以在输入的时候就排序了
}
for(i=1;i<10;i++){
int temp=a[i];
int n=i-1;
//跟前面的比较,小的话就向前,并且该位向后移动一位
while(n>-1&&temp第二个for循环i=1就是从第二个数开始可能需要大家一点抽象思维去想象比如排队
是按号排队的
他迟到了
然后他就拿这号从最后一位一直向前问
后面的都比他大,终于找到一个比他小的
他不可能排他前面,所以只能排他后面
然后他就插队进去了
他后面的人都被他挤后了一位接下来介绍另一种排序算法冒泡排序冒泡排序的思想是,每次把最小的数冒到左边
就像气泡一样越接近水面的泡泡越大
继续是以刚刚的数列5,4,2为例
从第一个数开始
5比4大,然后就交换
4比2大然后就交换
然后现在的序列是2,5,4
然后到第二个数开始
5比4大,交换位置
然后这个序列就排好了具体代码如下#include
int main(){
int a[1000];
int i,j,temp;
for(i=0;i<10;i++){
scanf("%d",&a[i]);
}
for(i=0;i<9;i++){
//跟后面的所有数进行比较,大的就交换
for(j=i+1;j<10;j++){
//交换
if(a[i]>a[j]){
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
for(i=0;i<10;i++){
printf("%d ",a[i]);
}
return 0;
} 这种排序方法是初学者必须掌握的一种排序方法最后讲一种高级一点的算法快速排序掌握这种方法可以说是初学者的分水岭这种排序方法包含了递归和分治的思想递归我们最熟悉的就是猴子吃桃最后一天剩一个,每天吃总数的一半,吃了五天,然后问你最开始有多少个桃子然后就是从最后一天开始算,一直算到第一天分治就是,讲一个问题分开处理但分开处理是没有影响的就比如扫地可以扫地分为扫客厅和扫房间快速排序的思想是从给一个数组,然后在数组中找一个基准值两边派一个士兵去帮我找数要从右边的士兵开始右边的士兵要找一个比基准值小的数找到后停下来等左边的士兵左边的士兵要找一个比基准值大的数找到后就停下来,交换这两个数的位置交换后继续找,直到他们相遇相遇时这个数一定比基准值小大家直到为啥吗我们有一个很关键的一步从右边开始右边停下的位置一定是小于基准值的相遇后相遇的数和基准值交换,我们这里取最左边的数为基准值交换之后,基准值的左边都是比基准值小的,基准值右边都是比基准值大的然后就按相同的规则排基准值的左边和右边排序时不仅要传入数组,还要传入范围一旦排到左边界等于右边了就不用排了,就可以return返回了代码如下#include
int main(){
int a[1000];
int i;
for(i=0;i<10;i++){
scanf("%d",&a[i]);
}
quicksort(a,0,9);
for(i=0;i<10;i++){
printf("%d ",a[i]);
}
return 0;
}
void quicksort(int a[],int left,int right){
if(left>=right){
return;
}
int low=left;
int high=right;
//这个基准值可以随便取,只要在left和right范围内就好
int key=a[left];
while(low!=high){
//顺序很重要,要先从右边开始找
//因为最后交换时左边的要都比基准小
//右边大于基准值就跳过
while(low=key){
high--;
}
//左边小于基准值就跳过
while(low如果大家理解了这种算法,对c语言的造诣就会深一层
这篇关于快速排序博客有配图更加形象这里讲的都是从小到大的排序,大家可以思考一下用这几种算法如何从大到小排序
fun88网东莞金码教育部分班级合影
2017年1月12日,嘉华教育集团在深圳南山文体中心隆重举办了11周年庆典。出席本次庆典的嘉宾有原外交部副部长胡恩才先生、原深圳大学校长
fun88网东莞金码学校各班有兵乓球队和篮球队,学员可以根据自己的兴趣爱好选择球队参加训练及比赛,既锻炼了身体,又能增进同学感情,学员们在宽敞
fun88网东莞金码学校为学生提供住宿条件,干净的楼房,有专人管理打扫,安静环境氛围好,学生可根据意愿选择是否在校住宿。
随着社会的发展,电脑的运用已经普及到我们身边的每一个角落了,或许你会操作电脑,或许你会用电脑帮我们解决一些生活中的难题,但是电脑的功能很强大,你能真正领会到电脑中的奥秘吗?其实电脑里面还有很多东西等着我们去学习,还有很多技术 等着我们去探索,fun88网东莞金码学校就是一所学技术的学习!
据前程无忧发布的无忧指数数据显示,2013年6月,全国网上发布职位数逾274万个,与去年同期相比上涨幅度达23%。从国内十大热门行业来看,除
对于大学生,特别是初涉职场的大学生而言,这还真不是一件容易的事。这中间可面临不少挑战。那么,在试用期该如何摆正自己的位置和心态,让
每个人的职业生涯都有周期,其中20~40岁的这20年最为关键,可以说是职业生涯的黄金阶段。现阶段,由于经济 低 迷,企业裁员、行业萎缩等
面试时有些错一定不能犯!这一话题日前在前程无忧论坛引起了网友们的热烈讨论。但总有马失前蹄的时候,总会一不留神暴露出破绽。在面试时如
简历一定要突出你的能力、成就以及过去经验,重要的是要明确以下几点:1、明确你要寻求的是不是这个职位。只有你明白这个职位做什么,你要
语法是语言的特色,而算法却是灵魂算法不分语言入门的算法要数排序算法今天的算法讲解将以c语言为例子将以下几个排序算法1 桶排序2 插
DDoS带来的破坏是巨大的,你无法阻止黑客对你的网站发动DDoS攻击,除非主动断开Internet连接。如果我们无法防止这种攻击,那么,怎样做才能最大限度地保护我们的企业网络呢?
十二招防护云计算或者说云技术的安全,本身就说明了采用云技术的个人、企业甚至是国家需要更多样的安全防护,而这其中,数据本源的安全防护至关 重要。
每个Android应用都需要一个名为AndroidManifest xml的程序清单文件,这个清单文件名是固定的并且放在每个Android应用的根目录下。
预处理程序提供了条件编译的功能。可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件。这对于程序的移植和调试是很有用的
对于互联网公司来说用户就是上帝,做好客户体验一切才有可能。所以互联网公司都会把钱砸向前端,Web前端程序员也越来越受到企业争相聘用。
2018年高考录取工作正在进行中,无论高考分数多少,考生都渴望进入大学深造。那么对于与该考成绩不理想只有200多分的的学员来说,选择的余地不多,高考是人生一大转折点,要面对从事职业和专业学习学校的选择,所以一定要慎重。对此,fun88网东莞金码学校就业部刘老师向考200多的考生给出了如下分析。
在互联网高度发达的今天,IT行业发展日趋迅猛,行业的产值成倍增长,发展也必然带来人才的需求,而且其高报酬的诱惑、光明的就业前景吸引
就在昨天2月23日,fun88网金码学校开学啦!软件工程师培训班S2T131的学员们,在开学典礼上嗨翻了,打破了以往吃瓜群众们眼中的IT男形象。
“我心目中的嘉华职业教育形象大使”投票活动全面启动