如何用C++语言编写一个程序来对4个整数进行排序(从最小到最大)?
时间: 2024-11-05 10:28:13 浏览: 3
在C++中,你可以使用数组和内置的排序算法`std::sort`来实现对4个整数的排序。以下是一个简单的示例:
```cpp
#include <iostream>
#include <algorithm> // 引入排序库
int main() {
int numbers[4]; // 创建一个包含4个元素的整数数组
// 输入4个整数
std::cout << "请输入4个整数:" << std::endl;
for (int i = 0; i < 4; ++i) {
std::cin >> numbers[i];
}
// 对数组进行排序
std::sort(numbers, numbers + 4); // 第二个参数是数组的结束地址(非包含),表示范围是0到3
// 输出排序后的结果
std::cout << "排序后的数组:";
for (int i = 0; i < 4; ++i) {
std::cout << numbers[i] << " ";
}
std::cout << std::endl;
return 0;
}
```
在这个程序中,我们首先输入四个整数,然后使用`std::sort`函数对它们进行升序排序,最后输出排序后的结果。
相关问题
用c++语言编写一个程序输入N个元素,并将它们一个一个地插入到一个最小堆中。以线性时间建立一个堆。 比较两个算法对于已排序、反序以及随机输入的运行时间。
在C++中,我们可以使用标准库`<algorithm>`中的`make_heap`函数来在线性时间内构建一个最小堆。首先,我们需要定义一个结构体或类来存储数据并实现小于操作。这里我将以整数为例:
```cpp
#include <iostream>
#include <vector>
#include <queue>
#include <ctime>
struct Compare {
bool operator()(int a, int b) { return a < b; } // 最小堆,a总是比b小
};
void insert_sorted(int N, std::vector<int>& nums) {
std::priority_queue<int, std::vector<int>, Compare> minHeap;
for (int i = 0; i < N; ++i) {
minHeap.push(nums[i]);
}
}
void insert_reversed(int N, std::vector<int>& nums) {
std::priority_queue<int, std::vector<int>, Compare> minHeap;
for (int i = N - 1; i >= 0; --i) {
minHeap.push(nums[i]);
}
}
void insert_random(int N, std::vector<int>& nums) {
std::priority_queue<int, std::vector<int>, Compare> minHeap;
std::srand(std::time(0)); // 设置随机种子
for (int i = 0; i < N; ++i) {
minHeap.push(nums[i]); // 假设nums是一个预先填充了随机数的向量
}
}
int main() {
std::vector<int> nums(N); // 填充测试数据
// 测试三种情况的时间
auto start_sorted = std::chrono::high_resolution_clock::now();
insert_sorted(N, nums);
auto end_sorted = std::chrono::high_resolution_clock::now();
auto start_reversed = std::chrono::high_resolution_clock::now();
insert_reversed(N, nums);
auto end_reversed = std::chrono::high_resolution_clock::now();
auto start_random = std::chrono::high_resolution_clock::now();
insert_random(N, nums);
auto end_random = std::chrono::high_resolution_clock::now();
double sorted_time = std::chrono::duration_cast<std::chrono::microseconds>(end_sorted - start_sorted).count();
double reversed_time = std::chrono::duration_cast<std::chrono::microseconds>(end_reversed - start_reversed).count();
double random_time = std::chrono::duration_cast<std::chrono::microseconds>(end_random - start_random).count();
std::cout << "Sorted input time: " << sorted_time << " us\n";
std::cout << "Reversed input time: " << reversed_time << " us\n";
std::cout << "Random input time: " << random_time << " us\n";
return 0;
}
```
在这个程序中,我们分别对已排序、反序和随机输入的情况进行了时间测量。一般来说,因为最小堆的特性,对于已排序的数组,插入过程几乎是常数时间;而对于反序和随机输入,由于需要调整堆结构,时间可能会增加。
用c++语言完成下面两题:第一题:输入10个整数,将其中最小的数与第1个数对换,把最大的数与最后一个数对换。编写3个子函数:(1)输入10个数;(2)进行处理;(3)输出10个数。 第二题: (1)编写一个子函数实现月份输出 (2)再编写一个子函数实现月份按字符串顺序排列,并将排序结果进行输出
第一题代码实现:
```c++
#include<iostream>
using namespace std;
void input(int a[]) //子函数1:输入10个数
{
cout << "请输入10个整数:";
for (int i = 0; i < 10; i++)
{
cin >> a[i];
}
}
void process(int a[]) //子函数2:进行处理
{
int min_index = 0;
int max_index = 0;
for (int i = 1; i < 10; i++) //找到最小值和最大值的下标
{
if (a[i] < a[min_index])
{
min_index = i;
}
if (a[i] > a[max_index])
{
max_index = i;
}
}
int temp = a[0]; //将最小值与第一个数对换
a[0] = a[min_index];
a[min_index] = temp;
temp = a[9]; //将最大值与最后一个数对换
a[9] = a[max_index];
a[max_index] = temp;
}
void output(int a[]) //子函数3:输出10个数
{
cout << "处理后的10个数为:";
for (int i = 0; i < 10; i++)
{
cout << a[i] << " ";
}
}
int main()
{
int a[10];
input(a);
process(a);
output(a);
return 0;
}
```
第二题代码实现:
```c++
#include<iostream>
#include<string>
using namespace std;
void print_month(int month) //子函数1:输出月份
{
string month_name[12] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" };
cout << month << "月对应的英文名称为:" << month_name[month - 1] << endl;
}
void sort_month() //子函数2:将月份按字符串顺序排列并输出
{
string month_name[12] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" };
for (int i = 0; i < 11; i++) //使用冒泡排序
{
for (int j = 0; j < 11 - i; j++)
{
if (month_name[j] > month_name[j + 1])
{
string temp = month_name[j];
month_name[j] = month_name[j + 1];
month_name[j + 1] = temp;
}
}
}
cout << "按字符串顺序排列的月份为:";
for (int i = 0; i < 12; i++)
{
cout << month_name[i] << " ";
}
}
int main()
{
int month;
cout << "请输入月份:";
cin >> month;
print_month(month);
sort_month();
return 0;
}
```
阅读全文