数据结构(P110)

正数前置


设任意n个整数存放于数组A[1···n]中,请将所有正数排在所有负数前面(要求时间复杂度为O(n))。


#include<stdio.h>
void Arrange(int A[],int t)
//n个整数存于数组A中,本算法将数组中所有正数排在所有负数的前面
{	int i=1,j=t,x;  
	while(i<j)
	{	while(i<j && A[i]>0) 
			 i++;
		while(i<j && A[j]<0) 
			 j--;
		if(i<j&&A[i]<0&&A[j]>0) 
		{	x=A[i];
		 	A[i++]=A[j]; 
		 	A[j--]=x; 
		}//交换A[i] 与A[j]
	}
	for(int j=1;j<=t;j++){
		printf("%d ",A[j]);
	}
	printf("\n");
}
int main()
{
    int n,x,a[255];
    printf("请输入数据个数:"); 
    scanf("%d",&n);
    printf("数据输入:\n");
    for(int i=1;i<=n;i++){
    	scanf("%d",&a[i]);
	} 
    Arrange(a,n);
    return 0;
}




思路:从第一个数(i=1)和最后一个数(j=n)开始双向遍历,如果a[i]为正数那么i++,如果a[j]为负数那么j–,然后在i<j的情况下如果a[i]<0并且a[j]>0然后交换数据。

猜你喜欢

转载自blog.csdn.net/shf1730797676/article/details/83549877
今日推荐