灰灰考研-每日编程题1 前正后负
题目
(2018吉林大学941)一个长度为 n 的数组由负数、0、正数组成。编写函数,将其重新排序为前段都是负数,后段均为非负数的结构。要求时间复杂度为 O(n)。
我的解法及思路
思路:判断正负并将其逐个放在新数组里
代码
#include"iostream"
const int n=5;
int main(){
using namespace std;
int a[n]={-1,2,0,1,-2},b[n]={0,0,0,0,0};
for(int i=0,p=0,q=0;i<n;i++){
if(a[i]>0)
{
b[n-p-1]= a[i];
p++;
}
else if(a[i]<0)
{
b[q]=a[i];
q++;
}
}
for(int i=0;i<n;i++){
cout<<b[i]<<' '<<endl;
}
return 0;
}
参考答案
代码:![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/4ae7e2cbd3fa29fc59c7c08701dd5509.jpeg)
对比
参考答案的解法在思想上和我并无差别,但是答案里使用了顺序表和指针,在没有开新空间的情况下完成了排序,而我使用了数组且开了新数组,这是对于数据结构应用的缺乏。(自己写的时候花了20minQAQ)
ps:题目非常简单,首次写博客,初心是希望记录和督促自己锻炼代码能力。
参考内容:灰灰考研每日编程1-前正后负