使用选择排序按最小数字排序
sorting by smallest digit using selection sort
我的任务是使用选择排序按数字的最小数字对数组进行排序。例如:61<35,因为1<3.如果数字一致,我必须打印2中最小的一个。这就是我的代码:
#include <iostream>
#include <time.h>
using namespace std;
int smallestOfTwo(int a, int b) {
if (a < b) return a;
else return b;
}
int smallestDigit(int a) {
int smallDigit = 9;
while (a != 0) {
if (a % 10 < smallDigit) {
smallDigit = a % 10;
}
a /= 10;
}
return smallDigit;
}
void selectionSort(int arr[], const int size) {
for (int i = 0; i < size - 1; i++) {
int min = i;
for (int j = i + 1; j < size; j++) {
if (smallestDigit(arr[j]) == smallestDigit(arr[min])) min = smallestOfTwo(j, min);
else if (smallestDigit(arr[j]) < smallestDigit(arr[min])) min = j;
}
if (min != i) {
swap(arr[min], arr[i]);
}
}
}
int main() {
srand(time(NULL));
const int size = 5;
int arr[size];
for (int i = 0; i < size; i++) {
arr[i] = rand() % 201;
cout << arr[i] << " ";
}
cout << "n--------------------------------------------------------------------------------------n";
selectionSort(arr, size);
for (int i = 0; i < size; i++) cout << arr[i] << " ";
return 0;
}
问题是,对于某些数字,它是有效的(例如,对于23 63 70 37 183,输出是正确的:70 183 23 37 63(,但对于一些数字,它不起作用(例如,27 26 156 178 47。输出是156 178 27 26 47,但应该是156 178 26 27 47(,我不知道为什么。任何帮助都将不胜感激。谢谢
26和27都有最小的数字2,因此它们是等价的,并且可以在结果中按任何顺序排列。为了保持原始顺序,您可以尝试查找";稳定排序;若要回退到第二小数字、第三小数字等,您可以对每个数字进行计数和比较。
struct digit_counts {
int counts[10];
};
digit_counts convert(int a) {
digit_counts out = {};
while (a != 0) {
++out.counts[a % 10];
a /= 10;
}
return out;
}
bool operator<(const digit_counts& dc1, const digit_counts& dc2) {
for (int i = 0; i < 10; ++i) {
if (dc1.counts[i] > dc2.counts[i]) {
return true;
}
else if (dc2.counts[i] > dc1.counts[i]) {
return false;
}
}
return false;
}
如果你想回到两者中较小的一个,那么写你自己的比较函数。
bool special_less_than(int a, int b) {
int small_digit_a = smallestDigit(a);
int small_digit_b = smallestDigit(b);
if (small_digit_a < small_digit_b) {
return true;
}
else if (small_digit_a > small_digit_b) {
return false;
}
else {
return a < b;
}
}
相关文章:
- 二叉排序树无法编译
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- C++将浮点指针值舍入为小数位数
- 从给定的 I 和 D 序列中形成最小数
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- C++选择排序算法中的逻辑错误
- 使用C++程序合并排序没有得到正确的输出
- 计算排序向量的向量中唯一值的计数
- 排序算法c++
- 使用2个键的cpp-stl::优先级队列排序不正确
- 将结构向量排序为子组
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 如何对点云数据进行排序
- 对字符串进行排序时,在c++中处理sort()
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- 下面是排序算法O(n)吗
- std::sort()函数无法对向量的一部分进行排序
- shell排序中的交换和比较
- clang格式:禁用排序包含
- 显示错误输出的简单数组排序程序