int a[101],n//定义全局变量,这两个变量需要在子函数中使用
void quicksort(int left,int right)
{
int i,j,t,temp
if(left>right)
return
temp=a[left] //temp中存的就是基准数
i=left
j=right
while(i!=j)
{
//顺序很重要,要先从右往左找
while(a[j]>=temp && i<j)
j--
//再从左往右找
while(a[i]<=temp && i<j)
i++
//交换两个数在数组中的位置
if(i<j)//当哨兵i和哨兵j没有相遇时
{
t=a[i]
a[i]=a[j]
a[j]=t
}
}
//最终将基准数归位
第 1 章 一大波数正在靠近——排序
19
a[left]=a[i]
a[i]=temp
quicksort(left,i-1)//继续处理左边的,这里是一个递归的过程
quicksort(i+1,right)//继续处理右边的,这里是一个递归的过程
}
int main()
{
int i,j,t
//读入数据
scanf("%d",&n)
for(i=1i<=ni++)
scanf("%d",&a[i])
quicksort(1,n) //快速排序调用
//输出排序后的结果
for(i=1i<=ni++)
printf("%d ",a[i])
getchar()getchar()
return 0
}
建议采用DS18B20芯片。/**************************************
温度传感器DS18B20测试程序
主芯片 : STC90C52RC (12T)
工作频率: 12.000MHz
**************************************/
#include "REG51.H"
#include "INTRINS.H"
typedef unsigned char BYTE
sbit DQ = P3^3//DS18B20的数据口位P3.3
BYTE TPH //存放温度值的高字节
BYTE TPL //存放温度值的低字节
void DelayXus(BYTE n)
void DS18B20_Reset()
void DS18B20_WriteByte(BYTE dat)
BYTE DS18B20_ReadByte()
void main()
{
DS18B20_Reset() //设备复位
DS18B20_WriteByte(0xCC) //跳过ROM命令
DS18B20_WriteByte(0x44) //开始转换命令
while (!DQ) //等待转换完成
DS18B20_Reset() //设备复位
DS18B20_WriteByte(0xCC) //跳过ROM命令
DS18B20_WriteByte(0xBE) //读暂存存储器命令
TPL = DS18B20_ReadByte() //读温度低字节
TPH = DS18B20_ReadByte() //读温度高字节
while (1)
}
/**************************************
延时X*10微秒(STC90C52RC@12M)
不同的工作环境,需要调整此函数
当改用1T的MCU时,请调整此延时函数
**************************************/
void DelayX0us(BYTE n)
{
while (n--)
{
_nop_()
_nop_()
}
}
/**************************************
复位DS18B20,并检测设备是否存在
**************************************/
void DS18B20_Reset()
{
CY = 1
while (CY)
{
DQ = 0//送出低电平复位信号
DelayX0us(48) //延时至少480us
DQ = 1//释放数据线
DelayX0us(6) //等待60us
CY = DQ //检测存在脉冲
DelayX0us(42) //等待设备释放数据线
}
}
/**************************************
从DS18B20读1字节数据
**************************************/
BYTE DS18B20_ReadByte()
{
BYTE i
BYTE dat = 0
for (i=0i<8i++) //8位计数器
{
dat >>= 1
DQ = 0//开始时间片
_nop_() //延时等待
_nop_()
DQ = 1//准备接收
_nop_() //接收延时
_nop_()
if (DQ) dat |= 0x80 //读取数据
DelayX0us(6) //等待时间片结束
}
return dat
}
/**************************************
向DS18B20写1字节数据
**************************************/
void DS18B20_WriteByte(BYTE dat)
{
char i
for (i=0i<8i++) //8位计数器
{
DQ = 0//开始时间片
_nop_() //延时等待
_nop_()
dat >>= 1 //送出数据
DQ = CY
DelayX0us(6) //等待时间片结束
DQ = 1//恢复数据线
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)