写一个输入整数参数【userLevel】和一个由特定数据结构构成的数组【InputArray】(数组长度在500~1000),经过以下排序规则进行排序后,输出排序后的数组【SortedArray】。限定使用 Lua、C/C++、JavaScript这三种Cocos2d常用编程语言进行编写。
说明:
这个特定数据结构为
itemData:{
itemId : number/int,
buyPrice : number/float,
createTime : string/datetime
}
比如这个数值是itemData的一个实例 {itemId = 123, createTime = ‘2019-01-23 12:30:00’, buyPrice = 345.0}
排序规则如下:
1.先判断额外的参数【userLevel】是否大于等于3,如果是的话先按照【itemData.createTime】倒序排序,即时间越靠后排序越靠前,如果两个数据的【itemData.createTime】相等,再按照【itemData.itemId】顺序排序,即【itemData.itemId】越小越靠前。
2.如果额外的参数【userLevel】小于3,则先按照【itemData.buyPrice】顺序排序,即价格越低排序越靠前,如果两个数据的【itemData.buyPrice】相等,再按照【itemData.itemId】倒序排序,即【itemData.itemId】越大越靠前。
3.提示,itemId具有唯一性,不存在两个相等的itemId。
举例: 比如【InputArray】有以下几条数据,
{itemId = 121, createTime = '2019-01-23 12:30:00', buyPrice = 345.0}
{itemId = 122, createTime = '2019-01-23 12:30:00', buyPrice = 123.0}
{itemId = 123, createTime = '2019-03-01 12:30:00', buyPrice = 123.0}
当【userLevel】>= 3时,输出以下结果
{itemId = 123, createTime = '2019-03-01 12:30:00', buyPrice = 123.0}
{itemId = 121, createTime = '2019-01-23 12:30:00', buyPrice = 345.0}
{itemId = 122, createTime = '2019-01-23 12:30:00', buyPrice = 123.0}
当【userLevel】< 3时,输出以下结果
{itemId = 123, createTime = '2019-03-01 12:30:00', buyPrice = 123.0}
{itemId = 122, createTime = '2019-01-23 12:30:00', buyPrice = 123.0}
{itemId = 121, createTime = '2019-01-23 12:30:00', buyPrice = 345.0}
// 自己写的,就觉得c++ 时间转换这个很有意思
#include<stdio.h>
#include<iostream>
#include<windows.h>
#include<string>
#include<stdlib.h>
#include<vector>
#include<ctime>
#include<time.h>
#include<queue>
using namespace std;
const double EXP = 1e-6;
struct listData {
int itemId;
double buyPrice;
string createTime;
};
time_t StringToDatetime(string str)
{
char *cha = (char*)str.data(); // 将string转换成char*。
tm tm_; // 定义tm结构体。
int year, month, day, hour, minute, second;// 定义时间的各个int临时变量。
sscanf_s(cha, "%d-%d-%d %d:%d:%d", &year, &month, &day, &hour, &minute, &second);// 将string存储的日期时间,转换为int临时变量。
tm_.tm_year = year - 1900; // 年,由于tm结构体存储的是从1900年开始的时间,所以tm_year为int临时变量减去1900。
tm_.tm_mon = month - 1; // 月,由于tm结构体的月份存储范围为0-11,所以tm_mon为int临时变量减去1。
tm_.tm_mday = day; // 日。
tm_.tm_hour = hour; // 时。
tm_.tm_min = minute; // 分。
tm_.tm_sec = second; // 秒。
tm_.tm_isdst = 0; // 非夏令时。
time_t t_ = mktime(&tm_); // 将tm结构体转换成time_t格式。
return t_; // 返回值。
}
bool cmp1(const listData a, const listData b) {
if (abs(a.buyPrice - b.buyPrice) < EXP)//PRICE 相等
{
return a.itemId > b.itemId;// 越大越靠前
}
else
{
return a.buyPrice < b.buyPrice;
}
}
bool cmp2(const listData a, const listData b) {
if (StringToDatetime(a.createTime) == StringToDatetime(b.createTime))
{
return a.itemId < b.itemId;// 越小越靠前
}
else
{
return StringToDatetime(a.createTime) > StringToDatetime(b.createTime);
}
}
int main()
{
listData n_Data[3];
vector<listData> InputArray;
n_Data[0].itemId = 121;
n_Data[0].createTime = "2019-01-23 12:30:00";
n_Data[0].buyPrice = 345.0;
n_Data[1].itemId = 122;
n_Data[1].createTime = "2019-01-23 12:30:00";
n_Data[1].buyPrice = 123.0;
n_Data[2].itemId = 123;
n_Data[2].createTime = "2019-03-01 12:30:00";
n_Data[2].buyPrice = 123.0;
for (int i = 0; i < 3; i++)
{
InputArray.push_back(n_Data[i]);
}
cout << "排序前" << endl;
for (vector<listData>::iterator it = InputArray.begin(); it != InputArray.end(); it++){
cout << "itemId: " << it->itemId << " createTime: " << it->createTime << " buyPrice: " << it->buyPrice << endl;
}
int userLevel;
cout << "请输入需要排序的userLevel = ";
cin >> userLevel;
clock_t now1 ,end1;
now1 = clock();
cout << "starttime:" << now1 << endl;
if (userLevel < 3)
{
sort(InputArray.begin(), InputArray.end(), cmp1);
}
else
{
sort(InputArray.begin(), InputArray.end(), cmp2);
}
end1 = clock();
cout << "sort needtime:" << end1 - now1 << endl;
cout << "=============================" << endl;
cout << "排序后" << endl;
time_t now = time(0);
cout << "starttime:" << now << endl;
for (vector<listData>::iterator it = InputArray.begin(); it != InputArray.end(); it++){
cout << "itemId: " << it->itemId << " createTime: " << it->createTime << " buyPrice: " << (double)it->buyPrice << endl;
}
time_t end = time(0);
cout << "endttime:" << end << endl;
cout << "print needtime:" << end - now<< endl;
system("pause");
return 0;
}