以EOF结束输入 PTA 7-12 排序(数组)

7-12 排序(数组) (5分)

输入若干整数到一个数组中,把它从小到大排序后输出。

输入格式:
输入若干整数,用EOF结束。

输出格式:
排序后的数组

数与数间用一个空格隔开。

输入样例:

3 5 7 7 2 1 6

输出样例:

1 2 3 5 6 7 7 

思路:
唯一的难点就是怎么以EOF结束了

  1. while(cin>>x>>y){}
  2. while(scanf("%d %d",&x,&y)){}

但是对于这个题,如果输入一个数,以上两种方法肯定会出错 对于这个题来说,要用下边这个

  1. while(scanf("%d",&x)=EOF){}

还是因为刚学的快排,接着用快排解~
代码:

    #include <bits/stdc++.h>
    using namespace std;
    int a[1000];
    void quickSort(int left ,int right){
        int x=left,y=right;
        int z=a[left];
        if(x>y)return;
        while (x!=y)
        {
            while(a[y]>=z && x<y)
                y--;
            while(a[x]<=z && x<y)
                x++;
            if(x<y)
            {
                swap(a[x],a[y]);
            }
        }
        swap(a[x],a[left]);
        quickSort(left,x-1);
        quickSort(x+1,right);
        return;
    }
    int main()
    {
        int x=0,y,z;
        while(scanf("%d",&y)!=EOF)
       {
            a[x]=y;
            x++;
       }
        int left = 0,right = x-1;
        quickSort(left,right);
        for (int i = 0; i < x; ++i) {
            cout<<a[i]<<" ";
        }
        return 0;
    }

猜你喜欢

转载自blog.csdn.net/qq_46039856/article/details/106484286
今日推荐