我正在尝试通过计算元素来对数组进行排序,然后再次对它们进行排序"counting sort"
I'm trying to sort an array by counting the elements and then sort them again "counting sort"
我正在尝试通过制作另一个数组来对数组进行排序,该数组的大小为我要排序的数组中的最大数字,然后每次我找到数字时,I ++该数字的索引。例如:主数组是 {5,3,8,1,2,3}另一个数组 {0,1,1,2,0,1,0,0,1}那么我的排序数组将像{1,2,3,3,5,8}我不知道为什么我的代码不起作用,请问吗?
#include <iostream>
using namespace std;
int findmax(int a[], int size){
int max = a[0];
for (int i = 0; i < size; i++)
if (max < a[i])
max = a[i];
return max;
}
void sort(int a[], int n){
int max = findmax(a, n);
int *arr;
arr = new int[max+1];
for (int i = 0; i < n; i++){
arr[a[i]]++;
}
for (int k = 0; k < n;){
for (int l = 0; l <= max; l++) {
while (arr[l] != 0){
a[k] = l;
arr[l]--;
k++;
}
}
}
您真正应该做的是在调试器中逐行单步执行代码。这样,您将轻松查看问题所在。
但既然我开始写这篇文章,我不妨把它作为答案发布。
问题是您分配并分配给arr
的数组未初始化,其内容不确定。使用未初始化的数据是未定义的行为。
真正发生的事情是,您分配的数据似乎是随机的,而且很可能没有一个是零的。这导致你的计数都是错误的。
解决方案是在计算值之前清除您分配的内存:
std::fill(arr, arr + max + 1, 0);
相关文章:
- 读取一组用户输入,按升序排序,然后打印结果
- C++ 按数值对元组<字符串、浮点数>然后按字典顺序排序的向量
- 修改的选择排序,选择最大的数字,然后交换到最后
- 如何创建一个C++程序来读取字符串数组中的信息,然后将其排序到类中?
- 如何根据长度然后字母顺序对数组字符串进行排序?
- 从文件中读取并将其内容放入对象数组中,然后对它们进行排序
- 对数组进行排序的算法,先是第一个元素,然后是前 2 个元素,然后是前 3 个元素,依此类推
- 按字母顺序排序字符数组,然后按长度排序
- 按第一个值的递减顺序对一组对进行排序,然后按第二个值的字母顺序排序
- 制作一个对的向量,对其进行排序,然后从中提取向量
- 根据标准对结构向量进行排序,然后显示结果
- 我有不同的类,我想用这些类中的对象制作一个向量,然后按值对其进行排序
- 读取中的链接列表,然后按名称进行排序
- 从文本文件将整数读入简单的链表中.然后对整数列表进行气泡排序并读出到另一个文件
- 是否有插入然后排序的替代方法
- c++我需要将文件中的数据读取到多维数组中,然后用一种数据类型对数组进行排序.怎样
- 插入最有效的数据结构,然后使用不同的条件进行排序
- 如何按第一个,然后是第二个,然后是第三个对 2d 数组进行排序,..使用 C++ 的列
- 对输入'age'名称进行排序,然后显示结果
- 提升ASIO-获得排序的端点(首先是IPv4,然后是IPv6)