题目描述
输入n个整数,输出其中最小的k个。
本题有多组输入样例,请使用循环读入,比如while(cin>>)等方式处理
输入描述
第一行输入两个整数n和k
第二行输入一个整数数组
输出描述
输出一个从小到大排序的整数数组
示例1
输入
5 2
1 3 5 7 2
输出
1 2
C++解法:
#include <iostream>
#include <string>
#include <cstring>
#include <vector>
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);
}
}
}
int getMin(int *array, int size) {
int min = array[0];
for (int i = 1; i < size; i++) {
if (min > array[i]) {
min = array[i];
}
}
return min;
}
void printArray(int* array, int size) {
for (int i = 0; i < size; i++) {
printf("%d ", array[i]);
}
printf("\n");
}
int 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;
}
}
return arrayIndex;
}
int main()
{
std::string str;
std::vector<int> values;
int array[256] = {0};
while (getline(std::cin, str)) {
int count = parseIntArray(str.c_str(), array);
int min = getMin(array, count);
values.push_back(min);
}
int size = values.size();
for (int i = 0; i < size; i++) {
array[i] = values.at(i);
}
selectionSort(array, size, 0);
printArray(array, size);
}