排序
(1)从小到大——升序
(2)从大到小——降序
选择排序
冒泡排序
插入排序
快速排序
选择排序:
思想:给合适的位置选择合适的数
#include<stdio.h>
int main(void)
{
int i=0,j=0,temp;
int a[]={1,8,34,3,2,0,9};
int len=sizeof(a)/sizeof(a[0]);
for(i=0;i<len-1;++i) //要确定的位置
{
for(j=i+1;j<len;++j) //给对应位置找合适的数
{
if(a[j]<a[i]) //如果找到比当前位置小的
{
temp=a[i]; //交换a[i]与a[j]
a[i]=a[j];
a[j]=temp;
}
}
}
printf("a[%d]={ ",len);
for(i=0;i<len;i++)
{
printf("%d ",a[i]);
}
printf("}\n");
return 0;
}
冒泡排序:
思想:一次冒出一个数,相邻两个元素两两比较,小的放前 大的放后
#include<stdio.h>
int main(void)
{
int i=0,j=0,len,temp;
int a[]={1,3,4,2,5,6,8,7};
len=sizeof(a)/sizeof(a[0]);
for(i=1;i<len;++i)
{
for(j=0;j<len-i;++j)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
printf("a[%d]={ ",len);
for(i=0;i<len;i++)
{
printf("%d ",a[i]);
}
printf("}\n");
return 0;
}
插入排序:
思想:在有序序列中,找到合适的位置插入
#include<stdio.h>
int main(void)
{
int i=0,j=0,len,temp;
int a[]={1,2,4,29,6,8,7};
len=sizeof(a)/sizeof(a[0]);
int b[len];
/* for(i=1;i<len;++i) //第i个数被拿走去插入
{
temp=a[i]; //拿走第i个数
j=i; //第i个数,区分于下面的j
while(j>0 && temp<b[j-1]) //判断第i个数是否小于前面的数
{
b[j]=b[j-1]; //前面的数后挪给第i个数留位置
--j; //自减(继续向前比)
}
b[j]=temp; //放数据
}*/
for(i=0;i<len;++i)
{
temp=a[i];
j=i;
while(j>0&&temp<a[j-1])
{
a[j]=a[j-1];
--j;
}
a[j]=temp;
}
printf("a[%d]={ ",len);
for(i=0;i<len;i++)
{
printf("%d ",a[i]);
}
printf("}\n");
return 0;
}
查找算法
二分算法(折半查找)
大前提:
数据有序
#include<stdio.h>
int main(void)
{
int i=0,j=0,len,temp;
int a[]={1,2,4,29,6,8,7};
len=sizeof(a)/sizeof(a[0]);
//排序
for(i=0;i<len;++i)
{
temp=a[i];
j=i;
while(j>0&&temp<a[j-1])
{
a[j]=a[j-1];
--j;
}
a[j]=temp;
}
//查找
int begin,end,mid,m;
begin=0;
end=len-1;
printf("输入要查找的数:");
scanf("%d",&m);
while(begin<=end)
{
mid=(begin+end)/2;
if(a[mid]>m)
{
end=mid-1;
}
else if(a[mid]<m)
{
begin=mid+1;
}
else
{
break;
}
}
if(begin<=end)
{
printf("yes\n");
}
else
{
printf("no\n");
}
return 0;
}
思想:找到中间位置的数
拿这个数和要找的数比较
一维字符数组
数据类型 数组名 [数组长度]
char s [] 一维字符型数组
从数组角度:
char s[20]={'a','b','c'};
数组是用来存放数据
一维字符型数组用来——————放字符串
字符串形式
char s[20]={“hello”};
1.字符串是当作字符数组来处理的
2.字符串有一个专门的结束标志:‘\0’
3.处理的是 字符串,操作时候往往以 结束标志 为操作依据
4.处理的是 数组 ,操作时候往往以 数组长度 为操作依据
5.字符数组可以用来存储字符串
而字符串在内存中储存的方式 也是以 字符数组形式存储的
实际占用空间包含‘\0’
“” 空字符串
\0 是字符串的标志
puts:
输出一个字符串
int puts(const char*s);
功能 输出一个字符串
参数:
const char*s ; 表示字符串——指针类型
字符数组名
字符串常量
返回值:
成功 非负数
失败 -1
puts 输出时自动换行
char gets(char*s);
功能:从键盘获得一个字符串
参数:
返回值:
成功 s
失败 null