设任意n个整数存放于数组A中,试编写算法,在数组A中将所有正数排在所有负数前面(以元素交换为基本操作,要求该算法的时间复杂度为0(n))
【运行结果如下】
【代码如下】
#include<stdio.h>
typedef void Status;
/*初始化数组*/
Status InitArray(int ch[],int len)
{
int i;
for (i = 0; i < len; i++)
scanf("%d",&ch[i]);
}
/*输出*/
Status Output(int ch[],int len)
{
int i;
for (i = 0; i < len; i++)
printf("%d ",ch[i]);
}
/*排序*/
Status Sort(int ch[],int len)
{
int i = 0;
int j = len - 1; //数组最后一个位置
int temp;
while (i != j){ //当i和j相遇时,结束循环
if (ch[i] > 0)
i++;
else{
temp = ch[i];
ch[i] = ch[j];
ch[j] = temp;
j--;
}
}//while
Output(ch,len);
}
/*排序
Status Sort(int ch[],int len)
{
int str[20];
int i;
int m = 0;
int n = len-1;
for (i = 0; i<len; i++){
if (ch[i] > 0)
str[m++] = ch[i]; //正数放前面
else
str[n--] = ch[i]; //负数放后面
}
Output(str,len);
}*/
int main()
{
int ch[20];
int len;
scanf("%d",&len);
InitArray(ch,len);
Sort(ch,len);
return 0;
}
本文章仅供学习和参考!
欢迎交流~