选择排序
选择排序,对输入的n个数字进行升序排列。
输入
第一行一个数n,
第二行n个待排序的数字ai。
输出
一行升序排列,n个用空格隔开的数字。
输入样例
4
4 3 2 1
输出样例
1 2 3 4
说明/提示
对100%数据,n≤1000,ai≤1000000。
题解
完整代码及注释说明
#include <iostream>
using namespace std;
// 定义数组
int arr[] = {};
// 交换函数
void swap_(int &a, int &b){
int temp = a;
a = b;
b = temp;
}
// 选择排序
void selectSort(int arr[], int n){
for (int i = 0; i < n - 1; i++){
// 找到最小值的索引
int minIndex = i;
for (int j = i + 1; j < n; j++){
// 如果找到比最小值小的,则更新最小值的索引
if (arr[j] < arr[minIndex]){
// 将最小值的索引更新为当前值的索引
minIndex = j;
}
}
// 将最小值与当前值交换
swap_(arr[i], arr[minIndex]);
}
}
int main(){
int a;
cin >> a;
// 初始化数组
for (int i = 0; i < a; i++) {
int b;
cin >> b;
arr[i] = b;
}
//
selectSort(arr, a);
// 输出数组
for (int i = 0; i < a; i++) {
cout << arr[i] << " ";
}
return 0;
}
冒泡排序
对输入的n个数字进行升序排列。每趟冒一个当前最大数字到后面。依次输出每一趟排序的结果,。
输入
第一行一个数n,
第二行n个待排序的数字ai。
输出
n行,每行n个用空格隔开的数字,表示这一次的结果。
输入样例
4
4 3 2 1
输出样例
3 2 1 4
2 1 3 4
1 2 3 4
1 2 3 4
说明/提示
对100%数据,n≤1000,ai≤1000000。
题解
完整代码及注释说明
#include <iostream>
using namespace std;
// 定义数组
int arr[] = {};
// 交换函数
void swap_(int &a, int &b){
int temp = a;
a = b;
b = temp;
}
// 冒泡排序
void bubbleSort(int arr[], int n){
// 循环n-1次
for (int i = 0; i < n; i++) {
// 循环n-i-1次
for (int j = 0; j < n - i - 1; j++) {
// 如果前面的数比后面的数大,则交换
if (arr[j] > arr[j + 1]) {
swap_(arr[j], arr[j + 1]);
}
}
// 打印每次排序后的数组
for (int k = 0; k < n; k++) {
cout << arr[k] << " ";
}
cout << endl;
}
}
int main(){
int a;
cin >> a;
// 初始化数组
for (int i = 0; i < a; i++) {
int b;
cin >> b;
arr[i] = b;
}
// 调用冒泡排序函数
bubbleSort(arr, a);
return 0;
}
纸牌插排
纸牌牌面从小到大的顺序依次为3~10,J,Q,K,1,2,小王,大王。
输入
20张牌的大小,其中1~10用数字本身表示,JQK
用11,12,13表示,小王和大王用20和30表示。
输出
整理好顺序的20张牌的大小,空格隔开。
输入样例
2 1 4 4 3 6 10 13 12 11 30 20 7 8 9 4 5 5 5 5
输出样例
3 4 4 4 5 5 5 5 6 7 8 9 10 11 12 13 1 2 20 30
完整代码及注释说明
#include <iostream>
using namespace std;
// 定义数组
int arr[] = {};
// 插入排序
void insertSort(int arr[], int n){
// 对于未排序的元素,从后向前扫描,找到相应位置
for (int i = 1; i < n; i++) {
// 定义临时变量,用于存储待插入元素
int temp = arr[i];
int j = i - 1;
// 循环比较,找到插入位置
while (j >= 0 && arr[j] > temp) {
arr[j + 1] = arr[j];
j--;
}
// 插入元素
arr[j + 1] = temp;
}
}
int main(){
int a = 20;
// 初始化数组
for (int i = 0; i < a; i++) {
int b;
cin >> b;
// 将输入的1和2转换为14和15
if (b == 1 ) arr[i] = 14;
else if (b == 2 ) arr[i] = 15;
else arr[i] = b;
}
// 调用排序函数
insertSort(arr, a);
// 输出排序的结果
for (int l = 0; l < a; l++) {
// 将14和15转换为1和2输出
if (arr[l]==14) cout << 1 << " ";
else if(arr[l]==15) cout << 2 << " ";
else cout << arr[l] << " ";
}
cout << endl;
return 0;
}