数据结构与算法的实现(c++)之第一天
开发工具: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++)之第一天的更多相关文章
- C++基础代码--20余种数据结构和算法的实现
C++基础代码--20余种数据结构和算法的实现 过年了,闲来无事,翻阅起以前写的代码,无意间找到了大学时写的一套C++工具集,主要是关于数据结构和算法.以及语言层面的工具类.过去好几年了,现在几乎已经 ...
- Python八大算法的实现,插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序。
Python八大算法的实现,插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得 ...
- Canny边缘检测算法的实现
图像边缘信息主要集中在高频段,通常说图像锐化或检测边缘,实质就是高频滤波.我们知道微分运算是求信号的变化率,具有加强高频分量的作用.在空域运算中来说,对图像的锐化就是计算微分.由于数字图像的离散信号, ...
- java基础解析系列(四)---LinkedHashMap的原理及LRU算法的实现
java基础解析系列(四)---LinkedHashMap的原理及LRU算法的实现 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析 ...
- SSE图像算法优化系列十三:超高速BoxBlur算法的实现和优化(Opencv的速度的五倍)
在SSE图像算法优化系列五:超高速指数模糊算法的实现和优化(10000*10000在100ms左右实现) 一文中,我曾经说过优化后的ExpBlur比BoxBlur还要快,那个时候我比较的BoxBlur ...
- 详解Linux内核红黑树算法的实现
转自:https://blog.csdn.net/npy_lp/article/details/7420689 内核源码:linux-2.6.38.8.tar.bz2 关于二叉查找树的概念请参考博文& ...
- Python学习(三) 八大排序算法的实现(下)
本文Python实现了插入排序.基数排序.希尔排序.冒泡排序.高速排序.直接选择排序.堆排序.归并排序的后面四种. 上篇:Python学习(三) 八大排序算法的实现(上) 1.高速排序 描写叙述 通过 ...
- 排序算法的实现之Javascript(常用)
排序算法的实现之Javascript 话不多说,直接代码. 1.冒泡排序 1.依次比较相邻的两个数,如果前一个比后一个大,则交换两者的位置,否则位置不变 2.按照第一步的方法重复操作前length-1 ...
- RMQ问题总结,标准RMQ算法的实现
RMQ问题:对于长度为N的序列,询问区间[L,R]中的最值 RMQ问题的几种解法: 普通遍历查询,O(1)-O(N) 线段树,O(N)-O(logN) DP,O(NlogN)-O(1) RMQ标准算法 ...
随机推荐
- 探究Dubbo的拓展机制: 上
这篇博文是我决心深度学习Dubbo框架时记录的笔记, 主题是Dubbo的拓展点, 下面的几个部分相对来说比较零散, 貌似是不和主题挂钩的 , 并且是一些很冷门的知识点 , 但是它们确实是深入学习Dub ...
- Java工程师 基础+实战 完整路线图(详解版)
Java工程师 基础+实战 完整路线图(详解版) Java 基础 Java 是一门纯粹的面向对象的编程语言,所以除了基础语法之外,必须得弄懂它的 oop 特性:封装.继承.多态.此外还有泛型.反射 ...
- 我怎么感觉 ConcurrentDictionary<,> 不是线程安全的喃?
直接上代码 class Program { static readonly ConcurrentDictionary<string, Person> Dic = new Concurren ...
- JAVA大数类—基础操作(加减乘除、取模、四舍五入、设置保留位数)
当基础数据类型长度无法满足需求时可以使用大数类 构造方法接受字符串为参数 BigInteger bInt = new BigInteger("123123"); BigDecima ...
- 【LC_Lesson4】---罗马数字到整数得转换
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000例如, 罗马数字 2 写做 II ,即为两个并列 ...
- 解决.net core读取appSetting.json文件中文字符乱码
如上所诉 vs菜单栏中 :工具 =>自定义 => 命令 =>添加命令 =>文件 =>找到高级保存选项点击 然后关闭,这时在visual studio界面就会有高级保存选 ...
- 史上最简单的vi教程,10分钟包教会
从第一次接触vi/vim到现在已经十几年了,在这个过程中,来来回回,反反复复,学习vi很多次了. 虽然关于vi的使用,我还远未达到"专家"的水平,但对于vi的使用,我有话说. 1. ...
- 对标Eureka的AP一致性,Nacos如何实现Raft算法
一.快速了解Raft算法 Raft 适用于一个管理日志一致性的协议,相比于 Paxos 协议 Raft 更易于理解和去实现它. 为了提高理解性,Raft 将一致性算法分为了几个部分,包括领导选取(le ...
- Nginx在Centos 7中配置开机启动
1.创建脚本 # vi /etc/init.d/nginx #!/bin/bash # nginx Startup script for the Nginx HTTP Server # it is v ...
- 【5min+】传说中的孪生兄弟? Memory and Span
系列介绍 [五分钟的dotnet]是一个利用您的碎片化时间来学习和丰富.net知识的博文系列.它所包含了.net体系中可能会涉及到的方方面面,比如C#的小细节,AspnetCore,微服务中的.net ...