挑战任务
本关挑战任务是对一个数组进行排序,排序需要遵守一些规则:
先对数组从左到右,相邻元素进行比较,如果第一个比第二个大,就交换它们,进行一个升序排序;
再对数组从右到左,相邻元素进行比较,如果第一个比第二个小,就交换它们,进行一个降序排序;
以此类推,持续的、依次的改变排序的方向,并不断缩小没有排序的数组范围;
按照这种规则依次给整个数组排序,并将排序过程打印到控制台。
比如给出一组数据4,1,3,5,2,排序过程如下:
最后得到结果:1 2 3 4 5。
编程要求
请在右侧编辑器中填充代码,补全sort(vector arr)函数,实现指定的排序功能,并打印出排序过程(元素之间用空格隔开),函数参数说明如下:
arr:待排序的数组
注:不需排序的数组(如:1 2 3),直接打印原数组。
测试说明
样例1:
输入:
2 3 4 5 1
输出:
样例2:
输入:
1 5 4 3 2 6
输出:
题目链接:https://www.educoder.net/tasks/vjx8fpwslbum
ac代码如下:
#ifndef _TEST
#define _TEST
#include <iostream>
#include <vector>
using namespace std;
class Task{
public:
int sort(vector<int> arr){
/********* Begin *********/
int flag=0; //
int t=0;
while(1) //大循环
{
for(int i=1;i<arr.size();i++) //数组已完成排序,flag=1
{
if(arr[i]<arr[i-1])
break;
if(i==arr.size()-1)
flag=1;
}
if(flag==1) //退出循环
{
if(t==0)
{
for(int i=0;i<arr.size();i++)
{
cout<<arr[i]<<" ";
}
cout<<'\n';
}
return 0;
}
for(int i=0;i<arr.size()-1;i++) //从左到右排序
{
if(arr[i]>arr[i+1])
{
int temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
for(int i=0;i<arr.size();i++)
{
cout<<arr[i]<<" ";
}
cout<<'\n';
}
t++;
}
for(int i=arr.size()-1;i>0;i--) //从右到左排序
{
if(arr[i]<arr[i-1])
{
int temp=arr[i];
arr[i]=arr[i-1];
arr[i-1]=temp;
for(int i=0;i<arr.size();i++)
{
cout<<arr[i]<<" ";
}
cout<<'\n';
}
t++;
}
}
/********* End *********/
}
};
#endif
PS:虽然这道题很简单,但是感觉我的代码写的太差太臃肿了呜呜呜~