数组元素排序
【问题描述】
给定n个元素,设计算法实现从小到大排序
【输入形式】
第一行元素个数n,第二行输入n个元素。
【输出形式】
按小到大排好序的元素
【样例输入】
3
15 12 20
【样例输出】
12 15 20
【参考代码】
#include <iostream>
#include <vector>
using namespace std;
// 二分查找应该插入的位置
int binarySearch(const vector<int>& arr, int item, int low, int high) {
while (low <= high) {
int mid = low + (high - low) / 2;
if (item == arr[mid]) {
return mid;
} else if (item < arr[mid]) {
high = mid - 1;
} else {
low = mid + 1;
}
}
return low;
}
// 二分查找插入排序
void binaryInsertionSort(vector<int>& arr) {
int n = arr.size();
for (int i = 1; i < n; ++i) {
int key = arr[i];
int j = i - 1;
// 使用二分查找找到应该插入的位置
int loc = binarySearch(arr, key, 0, j);
// 将元素后移,为插入元素腾出空间
while (j >= loc) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}
int main() {
int n;
cin >> n; // 读取元素个数
vector<int> arr(n);
for (int i = 0; i < n; ++i) {
cin >> arr[i]; // 读取元素值
}
binaryInsertionSort(arr); // 对数组进行排序
// 输出排序后的数组
for (int i = 0; i < n; ++i) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
//From:TengMMVP
双色汉诺塔
【问题描述】
设 A、B、C 是 3 个塔座。开始时,在塔座 A 上有一叠共 n 个圆盘,这些圆盘自下而上, 由大到小地叠在一起。各圆盘从小到大编号为 1,2,……,n,奇数号圆盘着蓝色,偶数号圆盘着红色,如图所示。现要求将塔座 A 上的这一叠圆盘移到塔座 B 上,并仍按同样顺序叠置。在移动圆盘时应遵守以下移动规则:
规则(1):每次只能移动 1 个圆盘;
规则(2):任何时刻都不允许将较大的圆盘压在较小的圆盘之上;
规则(3):任何时刻都不允许将同色圆盘叠在一起;
规则(4):在满足移动规则(1)-(3)的前提下,可将圆盘移至&

最低0.47元/天 解锁文章
816

被折叠的 条评论
为什么被折叠?



