题目描述
输入整型数组和排序标识,对其元素按照升序或降序进行排序(一组测试用例可能会有多组数据)
本题有多组输入,请使用while(cin>>)处理
输入描述:
第一行输入数组元素个数
第二行输入待排序的数组,每个数用空格隔开
第三行输入一个整数0或1。0代表升序排序,1代表降序排序
输出描述:
输出排好序的数字
示例1
输入
8
1 2 4 9 3 55 64 25
0
5
1 2 3 4 5
1
输出
1 2 3 4 9 25 55 64
5 4 3 2 1
C++解决方法:
#include <iostream>
#include <cstring>
#include <vector>
#include <string>
void swap(int* array, int first, int second) {
int tmp = array[second];
array[second] = array[first];
array[first] = tmp;
}
void selectionSort(int* array, int size, int order) {
for (int i = size - 1; i >= 0; i--) {
int swapIndex = i;
for (int j = 0; j < i; j++) {
if (order == 0) {
if (array[j] > array[swapIndex]) {
swapIndex = j;
}
}
else {
if (array[j] < array[swapIndex]) {
swapIndex = j;
}
}
}
if (swapIndex != i) {
swap(array, swapIndex, i);
}
}
}
void parseIntArray(const char* text, int* array) {
int size = strlen(text);
char single = 0;
char buffer[10] = { 0 };
int bufferIndex = 0;
int arrayIndex = 0;
for (int i = 0; i <= size; i++) {
if (i == size) {
single = ' ';
} else {
single = text[i];
}
if (single == ' ') {
if (bufferIndex > 0) {
array[arrayIndex++] = atoi(buffer);
memset(buffer, 0, 10);
bufferIndex = 0;
}
}
else {
buffer[bufferIndex++] = single;
}
}
}
void printArray(int* array, int size) {
for (int i = 0; i < size; i++) {
printf("%d ", array[i]);
}
printf("\n");
}
int main()
{
int size = 0;
int order = 0;
int array[256] = { 0 };
std::string q;
std::vector<std::string> save_q;
while (getline(std::cin, q))
{
save_q.push_back(q);
if (save_q.size() == 3) {
size = atoi(save_q.at(0).c_str());
order = atoi(save_q.at(2).c_str());
parseIntArray(save_q.at(1).c_str(), array);
selectionSort(array, size, order);
printArray(array, size);
save_q.clear();
}
}
//}
return 0;
}