本题属于排序问题,只是排出正负,不排出大小。可在数组首尾设两个指针i和j,i自小至大搜索到负数停止,j自大至小搜索到正数停止。然后i和j所指数据交换,继续以上过程,直到 i=j为止。
#include<stdio.h>
#define N 5 //数组元素个数
void Arrange(int A[],int n)
// n个整数存于数组A中,本算法将数组中所有正数排在所有负数的前面
{
int i=0,j=n-1,x;
while(i<j)
{
while(i<j && A[i]>0)
i++;
while(i<j && A[j]<0)
j--;
if(i<j)
{
x=A[i];
A[i++]=A[j];
A[j--]=x;
//变换A[i]与A[j]
}
}
}
int main()
{
int A[10],i;
printf("请输入N个数:\n");
for(i=0;i<N;i++)
scanf("%d",&A[i]);
Arrange(A,N);
for(i=0;i<N;i++)
printf("%d ",A[i]);
return 0;
}
这是一篇关于使用C语言解决数组中正负数排序问题的文章。通过双指针i和j,分别从两端查找,将找到的正负数进行交换,最终达到所有正数位于负数前面的目标。算法的时间复杂度为O(n)。
。&spm=1001.2101.3001.5002&articleId=105716820&d=1&t=3&u=b4abe6dd15d34bbab8ba9589869ca535)
5429

被折叠的 条评论
为什么被折叠?



