[c/c++] programming之路(14)、数组+冒泡和选择排序
一、数组的基本知识
#include<stdio.h>
#include<stdlib.h> void main0(){
int a[]={,,,,};//数组在内存里是连续排列的
int i;//VS2012版本,变量的声明要放在最前面(所以建议大家使用VS2013及之后的版本)
printf("%d\n",sizeof(a));//求内存占多少
printf("%d\n",sizeof(a)/sizeof(int));//求数组有多少个元素
printf("%x\n",a); for (i = ; i < ; i++)//java语言中的a.length在这儿行不通,只能sizeof(a)/sizeof(int)
{
printf("a[%d]=%d &a[%d]=%x\n",i,a[i],i,&a[i]);
} system("pause");
} void main1(){
int i;
int a[];//数组越界不报错
//因为数组外部的内存空间,不确定是否有权限,
//如果越界访问,程序会崩溃
for (i = ; i < ; i++)
{
a[i]=i+;
}
getchar();
}
二、const和define的区别(const代码不可更改,可在内存里更改;define放在常量区,无论如何无法修改)
#include<stdio.h>
#include<stdlib.h>
#define N 20 void main(){
int a[N]; //只有define可以
//printf("%d", &N); 报错,编译器放在常量区,没有地址,无从修改 const int num = ; //可变的常量,可以强制去掉常量的属性
//num = 12; const限定代码不能修改,在内存有实体,是可以变的数
printf("%x", &num);
//int b[num];//这样不可以 system("pause");
}
三、数组初始化
#include<stdio.h>
#include<stdlib.h> void main(){
//int num[10]={1,2,3,4,5,6,7,8,9,10};
//int num[10]={1,2,3,4,5,6,7,8};//不足部分,填充为0
//double num[10]={1,2,3,4};
//数组元素大小已经确定,下标可以省略
//double num[] = { 1, 2 };
//double num[] = {};//无法指定数组的大小,无法分配内存
double num[] = { };
printf("%x",&num);
getchar();
}
四、数组操作说明
#include<stdio.h>
#include<stdlib.h> void main4(){
int a[]={,,};
int b[];
int i;
//b=a; 数组不能进行赋值,数组名是一个地址常量
printf("%x\n", a);
for (i = ; i < ; i++)
{
scanf("%d", &a[i]);
printf("%d\n", a[i]);
}
system("pause");
} void main5(){
char str[] = { '', 'a', '', 'm', '\0' };//以'\0' 结束才不会出现“烫烫”
//char strm[15] = { 'c', 'a', 'l', 'c' };
char strm[] = { 'c', 'a', 'l', 'c' ,'\0'};
char strn[] = "notepad";//双引号会自动加上/0
scanf("%s", strn); //只有字符串才能整体输入输出
printf("%s", str);
system(strm);
system(strn);
system("pause");
}
五、数组访问
#include<stdio.h>
#include<stdlib.h> void main(){
int num[] = { , , , , , , , , , };
int i;
for (i = ; i < ; i++)
{
printf("%d,%d,%x,%x\n", num[i],*(num+i),&num[i],num+i);
//num[i]与*(num+i)等价 &num[i],num+i等价
}
printf("\n逆序\n");
for (i = ; i >= ; i--)
{
printf("%d,%x\n", *(num + i), num + i);
} getchar();
}
六、斐波那契数列
#include<stdio.h>
#include<stdlib.h>
//F(n)=F(n-1)+F(n-2)
void main(){
//int a[50]; int最后会越界
double a[];
int i;
a[]=1.0;
a[]=1.0;
for (i = ; i < ; i++)
{
a[i]=a[i-]+a[i-];
printf("%f\n",a[i]);
}
getchar();
}
七、选择排序法
求最大值
#include<stdio.h>
#include<stdlib.h>
#include<time.h>//时间随机数 void main(){
int num[];
time_t tms;//时间的数据类型
int i,X;
srand((unsigned int)time(&tms));//设置随机数种子
for (i = ; i < ; i++)
{
num[i]=+rand()%;
printf("%d\n",num[i]);
} X = ;//0是下标,我先假定0是最大的数
for (i = ; i < ; i++)
{
if (num[X] < num[i])
{
X = i;
}
}
printf("max=%d\n",num[X]);
getchar();
}
设置了随机数种子,每次的值都不一样
升序排列
#include<stdio.h>
#include<stdlib.h>
#include<time.h>//时间随机数 void main(){
int num[];
time_t tms;//时间的数据类型
int i,j,tmp;
srand((unsigned int)time(&tms));//设置随机数种子
for (i = ; i < ; i++)
{
num[i]=+rand()%;
printf("%d\n",num[i]);
} for (i = ; i < -; i++)//注意是 i<数组.length-1
{
for (j = i+; j < ; j++)//注意是 j=i+1
{
if(num[i]>num[j]){//升序
tmp=num[i];
num[i]=num[j];
num[j]=tmp;
}
}
}
printf("\n排序以后\n");
for (i = ; i < ; i++)
{
printf("%d\n", num[i]);
}
getchar();
}
八、冒泡排序法(效率不如选择)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>//时间随机数 void main(){
int num[];
time_t tms;//时间的数据类型
int i,j,tmp;
srand((unsigned int)time(&tms));//设置随机数种子
for (i = ; i < ; i++)
{
num[i]=rand()%;
printf("%d\t",num[i]);
}
//开始冒泡排序
for (i = ; i < -; i++)
{
for (j = ; j < --i; j++)
{
if(num[j]>num[j+]){
tmp=num[j];
num[j]=num[j+];
num[j+]=tmp;
}
}
}
printf("\n排序以后\n");
for (i = ; i < ; i++)
{
printf("%d\t", num[i]);
}
getchar();
}
九、数组与函数
#include<stdio.h>
#include<stdlib.h> void go(int a[]){//数组作为参数的时候,是传递地址
int b[];
printf("go=%d\n",sizeof(a));
printf("%d",sizeof(b));//这里的数组b非参数,即实际大小
} void main(){
int a[];
printf("%d\n",sizeof(a));
go(a);
getchar();
}
[c/c++] programming之路(14)、数组+冒泡和选择排序的更多相关文章
- 基于python语言的经典排序法(冒泡法和选择排序法)
前 每逢周末就遇雨期,闲暇之余,捣鼓了下python,心心念想学习,今天就在电脑上装了个2.7,学习了下经典算法,冒泡与选择排序法 第一次写关于python的文章,说的不当之处,多多指正,我积极改正 ...
- java中级——二叉树比较冒泡和选择排序
上次我们说到二叉树排序比较,给出如下的题目 题目:创建五万个随机数,然后用分别用冒泡法,选择法,二叉树3种排序算法进行排序,比较哪种更快 废话不说直接上源码,可以看控制台结果 注意的是 需要我们需要上 ...
- python基础:冒泡和选择排序算法实现
冒泡排序和选择排序 首先引用一下百度百科对于冒泡算法的定义: 冒泡排序算法的原理如下: 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素做同样的工作,从开始第一对到结尾 ...
- C语言之实现函数返回一个数组,以及选择排序,还有折半查找。这是同学的一个作业。。。
作业的具体要求如下: 编写一个完整的程序,实现如下功能.(1) 输入10个无序的整数.(2) 用选择排序法将以上接收的10个无序整数按从大到小的顺序排序.(3) 要求任意输入一个整数 ...
- C语言链表中数组实现数据选择排序,升序、降序功能主要难点
链表排序讲解: head指针指向链表的头结点,是找到整个链表的唯一依据,如果head指针丢失,整个链表就找不到了. head存储的是第一个节点的地址,head->next存储的是第二个节点的地址 ...
- Java基础【冒泡、选择排序、二分查找】
冒泡排序的思路就是前一个和后一个进行比较,如果大的就交换位置 大的数字后浮 如 12 8 5 31 第一轮 8 5 12 31 第二轮 5 8 ...
- StringBuffer、StringBuilder、冒泡与选择排序、二分查找、基本数据类型包装类_DAY13
1:数组的高级操作(预习) (1)数组:存储同一种数据类型的多个元素的容器. (2)特点:每个元素都有从0开始的编号,方便我们获取.专业名称:索引. (3)数组操作: A:遍历 public stat ...
- 【数组】—冒泡排序&&选择排序---【巷子】
/* 什么是冒泡排序:从头到尾比较相邻的两个数的大小,如果符合条件则进行比较 [注]:从小到大进行排序 假设有一个数组 var arr = [9,8,7,6,5,4]; 我们想要进行这个数组进行排序那 ...
- AJPFX:学习JAVA程序员两个必会的冒泡和选择排序
* 数组排序(冒泡排序)* * 冒泡排序: 相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处* * 选择排序 : 从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现 ...
随机推荐
- nodejs & npm & gulp 安装和配置
熟悉 Hellolily的过程中,了解了这个. 环境: ubuntu 14.04 LTS 64bit 源码安装方式: 下载最新源码:如果被和谐请自行想办法. 解压并编译安装: cd node-xxx ...
- D2
Cosmic Cleaner: 为什么大家都知道球缺怎么求,我没听说过啊??? 我真的是印象里今天第一次听说球缺这个东西啊... 我一看,哇,神仙几何题,毫无头绪,投了投了,然后就被过穿了??? tl ...
- Nestjs 缓存
Docs: https://docs.nestjs.com/techniques/caching yarn add @nestjs/mongoose mongoose yarn add cache-m ...
- eclipse哪个版本好
Eclipse IDE for Java EE Developers (企业级开发软件,干啥都足够了,300MB左右)
- Could not find or load main class org.apache.spark.deploy.yarn.ApplicationMaster
Spark YARN Cluster mode get this error "Could not find or load main class org.apache.spark.depl ...
- web开发中xml的内容
文档声明(注:文档声明前不能有注释) XML中的元素/标签 注:xmlx中解析程序会将其中的空格与换行当做内容来解析,区分大小写 CDATA区域中的内容不解析
- ubuntu安装sublime-text
按照网上的教程, wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key add - sudo apt ...
- gitlab提交代码
cd existing_foldergit initgit remote add origin http://10.26.1.9/root/yunlian.gitgit add .git commit ...
- cmd运行java程序---路径容易出错的问题
初学者在首次使用cmd运行java程序时面临着很多的问题,重要的基本为“设置环境变量过程”与运行过程中的“路径出错问题”.由于环境变量设置的网络分享更多,且为大众情况,因此比较容易解决! 由于本人 ...
- linux crontab详解 php开发相关
vi vi /etc/crontab 注意不是这么直接干的! 下面是内容 SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root ...