c++,对于一个有正数和负数的数组,将其中所有小于0的元素放到所有大于0的元素的前面。使用的算法 是:从左右两个方向扫描数组,从左向右找到大于等于0的元素,从右向左找到小于0的元素,将两 者交换.

#include<iostream>
using namespace std;
class KB
{
	private:
		int n;
		int a[100];
	public:
		KB(int aa[],int size)
		{
			n=size;
			for(int i=0;i<n;i++)
			a[i]=aa[i];
		}
		void print()
		{
			for(int i=0;i<n;i++)
			cout<<a[i]<<'\t';
			cout<<endl;
		}
		void fun()
		{
		int i=0,j=n-1,temp;
	    while(i<j)//因为完成最后一次交换后,中间的数不需要再交换。例如i=4,j=6。就不需要再进入循环 
    {
		for(i=0;i<10;i++)
		if(a[i]>0)
		break;
		for(j=9;j>=0;j--)
		if(a[j]<0)
		break;
		if(i<j)//如果没有这个条件将会造成最后一次交换错误 
		{ temp=a[i]; a[i]=a[j]; a[j]=temp; }
	}
		}
 } ;
 int main()
 {
 	int b[10]={1,-2,3,-4,5,6-7,-8,9,-10,-99};
 	KB zk(b,10);
 	zk.print() ;
 	zk.fun() ;
 	zk.print() ;
 }
发布了7 篇原创文章 · 获赞 0 · 访问量 127

猜你喜欢

转载自blog.csdn.net/zzzzzkkk/article/details/104742806