开发工具:codeblocks 17.12版本

学习视频来自b站

第一天:学习swap交换、冒泡排序

swap交换:swap是几乎所有的排序的最基础部分,代码如下:

#include <iostream>

using namespace std;

int main()
{
int a,b,tmp;
a=1;
b=10;
cout <<"a="<< a<<",b="<<b<< endl;
tmp=a;
a=b;
b=tmp;
cout <<"a="<<a<<",b="<<b<< endl;
return 0;
}

为了将其做成函数进行调用,进行了一个失败的案例:

#include <iostream>
//失败的例子
using namespace std;
//定义交换函数
void swap(int x,int y);

int main()
{
int a,b;
a=1;
b=10;
cout <<"a="<< a<<",b="<<b<< endl;
//调用交换函数
//a和b是如何传递的
//c++按值传递:把a拷贝一个传递进去,b相同
swap(a,b);//传递参数的方式
cout <<"a="<< a<<",b="<<b<< endl;
return 0;

}
//失败案例
//交换函数内容
void swap(int x,int y){
int tmp;
tmp=x;
x=y;
y=tmp;
}

学习视频得到了理解,后面进行尝试了几个成功的案例:

#include <iostream>
using namespace std;
void swap(int *px,int *py);

int main(){

int a,b;
a=1;
b=10;
cout<<"传递指针的方法:"<<endl;
cout <<"a="<< a<<",b="<<b<< endl;
//拷贝指针(地址)
swap(&a,&b);

cout <<"a="<< a<<",b="<<b<< endl;
return 0;

}
void swap(int *px,int *py){

int tmp;

tmp=*px;
*px=*py;
*py=tmp;

}

#include <iostream>
//c语言中最常用的就是宏定义
#define SWAP(x,y,t) ((t)=(x),(x)=(y),(y)=(t))
using namespace std;
int main()
{
int a,b,tmp;
a=1;
b=10;
cout<<"使用宏定义函数:"<<endl;
cout <<"a="<< a<<",b="<<b<< endl;
SWAP(a,b,tmp);
cout <<"a="<< a<<",b="<<b<< endl;
return 0;
}

#include <iostream>

using namespace std;

void swap(int &x,int &y);

int main()
{
int a,b;
a=1;
b=10;
cout<<"传引用:"<<endl;
cout <<"a="<< a<<",b="<<b<< endl;

swap(a,b);
cout <<"a="<< a<<",b="<<b<< endl;
return 0;
}
//引用就是别名
void swap(int &x,int &y)
{
int tmp;
tmp=x;
x=y;
y=tmp;
}

#include <iostream>
//使用自带的模板进行交换
using namespace std;
int main()
{
int a,b;
a=1;
b=10;
cout <<"使用std::swap函数"<<endl;
cout <<"a="<< a<<",b="<<b<< endl;
std::swap(a,b);
cout <<"a="<< a<<",b="<<b<< endl;
return 0;
}

就这一个小小的swap就这么多的写法,当然最好用的还是调用C++自带的函数库啦。

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

下面是一个冒泡排序,是在swap代码的基础上发展而来的,这应该是最简单的排序了吧,但同时也是效率最低的一个了吧:

#include <iostream>

using namespace std;
void bubblesort(int list[],int n);
int main()
{
int a[]={2,7,9,5,8,6,3,4,1,0};
bubblesort(a,10);

for(int k=0;k<10;k++)
{
cout<<a[k]<<" ";
}
cout<<endl;
return 0;
}
void bubblesort(int list[],int n)
{
//n=10
//0-9
//两个两个进行比较,每次扫描过程中,选择最大的,并且把它进行交换放到右边
//效率低
for(int i=0;i<=n-1;i++)
{
for(int j=0;j<n-i-1;j++)
{
if(list[j]>list[j+1])
std::swap(list[j],list[j+1]);
}
}
}

okay,这是昨天学习的总结啦

数据结构与算法的实现(c++)之第一天的更多相关文章

  1. C++基础代码--20余种数据结构和算法的实现

    C++基础代码--20余种数据结构和算法的实现 过年了,闲来无事,翻阅起以前写的代码,无意间找到了大学时写的一套C++工具集,主要是关于数据结构和算法.以及语言层面的工具类.过去好几年了,现在几乎已经 ...

  2. Python八大算法的实现,插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序。

    Python八大算法的实现,插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得 ...

  3. Canny边缘检测算法的实现

    图像边缘信息主要集中在高频段,通常说图像锐化或检测边缘,实质就是高频滤波.我们知道微分运算是求信号的变化率,具有加强高频分量的作用.在空域运算中来说,对图像的锐化就是计算微分.由于数字图像的离散信号, ...

  4. java基础解析系列(四)---LinkedHashMap的原理及LRU算法的实现

    java基础解析系列(四)---LinkedHashMap的原理及LRU算法的实现 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析 ...

  5. SSE图像算法优化系列十三:超高速BoxBlur算法的实现和优化(Opencv的速度的五倍)

    在SSE图像算法优化系列五:超高速指数模糊算法的实现和优化(10000*10000在100ms左右实现) 一文中,我曾经说过优化后的ExpBlur比BoxBlur还要快,那个时候我比较的BoxBlur ...

  6. 详解Linux内核红黑树算法的实现

    转自:https://blog.csdn.net/npy_lp/article/details/7420689 内核源码:linux-2.6.38.8.tar.bz2 关于二叉查找树的概念请参考博文& ...

  7. Python学习(三) 八大排序算法的实现(下)

    本文Python实现了插入排序.基数排序.希尔排序.冒泡排序.高速排序.直接选择排序.堆排序.归并排序的后面四种. 上篇:Python学习(三) 八大排序算法的实现(上) 1.高速排序 描写叙述 通过 ...

  8. 排序算法的实现之Javascript(常用)

    排序算法的实现之Javascript 话不多说,直接代码. 1.冒泡排序 1.依次比较相邻的两个数,如果前一个比后一个大,则交换两者的位置,否则位置不变 2.按照第一步的方法重复操作前length-1 ...

  9. RMQ问题总结,标准RMQ算法的实现

    RMQ问题:对于长度为N的序列,询问区间[L,R]中的最值 RMQ问题的几种解法: 普通遍历查询,O(1)-O(N) 线段树,O(N)-O(logN) DP,O(NlogN)-O(1) RMQ标准算法 ...

随机推荐

  1. MySQL数据库用户、角色、授权

    权限包括  insert   delete   update   select   all privileges 登录MySQL > mysql -uroot -p Enter password ...

  2. 【转】21个免费的UI界面设计工具、资源及网站

    本文将介绍21个免费的UI界面设计工具.资源及网站,如果你在做用户体验设计.界面设计.产品设计.JS前段开发.手机产品设计以及iPad和平板电脑产品设计,不妨来看看. AD: 2013云计算架构师峰会 ...

  3. 《【面试突击】— Redis篇》-- Redis的主从复制?哨兵机制?

    能坚持别人不能坚持的,才能拥有别人未曾拥有的.关注左上角编程大道公众号,让我们一同坚持心中所想,一起成长!! <[面试突击]— Redis篇>-- Redis的主从复制?哨兵机制? 在这个 ...

  4. P3369 【模板】普通平衡树 01Trie树

    P3369 [模板]普通平衡树 题目描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 插入xx数 删除xx数(若有多个相同的数,因只删除一个) 查询xx数的排名(排名 ...

  5. Mysql连接出现时区问题

    错误提示: The server time zone value '¥x¥_¼Ð·Ç®É¶¡' is unrecognized or represents more than one time zon ...

  6. web网页设计五种布局

    1.大框套小框布局   2.通栏布局   3.导航栏在主视觉下方的布局  4.左中右布局  5.环绕式布局

  7. final与 static的区别;static代码块以及嵌套类介绍

    本篇文章主要分为两个模块进行介绍:1.final,staic,static final之间的异同:2. static 模块:3.嵌套类的概念 1.final,staic,static final之间的 ...

  8. 异数OS 星星之火(一)-- 异数OS-织梦师云 用户使用手册

    . 异数OS 星星之火(一)– 异数OS-织梦师云 用户使用手册 本文来自异数OS社区 github: https://github.com/yds086/HereticOS 异数OS社区QQ群: 6 ...

  9. 频繁插入(insert)的业务,用什么存储引擎更合适? | 数据库系列(转)

    本文来自微信公众号 继续回答星球水友提问: 沈老师,MyISAM只支持表锁,但网上文章却说,在并发插入量比较大的时候,比较适合使用MyISAM,这矛盾吗? 这个问题,涉及MySQL表锁的一些细节,借着 ...

  10. Mac 查看端口占用情况及杀死进程

    查看端口占用情况命令 sudo lsof -i :9000 冒号后面就是你需要查看的端口号. TheEternityZhang-MacBook:project zhtony$ sudo lsof -i ...