重排正数和负数(将所有正数排在负数前面)

  • Post author:
  • Post category:其他



任务描述

本关任务:在数组中存放了n个整数,编写算法将所有正数排在负数前面(要求算法的时间复杂度为



O(n)



)。

#include<iostream>
using namespace std;

void Partition(int A[], int n)
{
   int i=0;
   int N=n;
   int temp;
   int num;
   for(int i=0;i<n;i++)
   {
       if(A[i]>0)
       {
           num++;
       } 
   }
   while(i<num)
   {
       int boolean=0;
       temp=A[i];
       while(A[i]<0)
       {
          
          if(A[n-1]>0)
          {
              
              A[i]=A[n-1];
          }
          else 
          {
              n--;
              A[i]=A[n-1];     
          }
          boolean++;
       }
       if(boolean)
       {
            A[n-1]=temp;
            n--;
       }
       i++;
   }
}

void Print(int A[], int length)
{//输出处理后的数组
    cout << A[0];
    for (int i = 1; i < length; i++)
    {
        cout << "-->" << A[i];
    }
    cout << endl;
}

int main()
{
    int n;
    cin>>n;
    int *arr = new int[n];
    for(int i=0;i<n;i++)
        cin>>arr[i];
    Partition(arr, n);
    Print(arr,n);
    delete[] arr;
    return 0;
}



版权声明:本文为weixin_66063587原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。