排序算法不起作用
Sorting algorithm not working
我的排序算法不断产生 10-15 个相同的数字,它假设对我的数组进行排序,该数组的大小为 2000,数字从 1-100。这是我只编码的家庭作业在C++ 4 个月了,我已经整天都在努力,截止日期为 12:00。请帮忙。只是无法弄清楚算法
//Function to sort the numbers
void sortNumbers(int nums[], int ARRAY_SIZE) {
int startScan, minIndex, minValue;
for (startScan = 0; startScan < (ARRAY_SIZE-1); startScan++) {
minIndex = startScan;
minValue = nums[startScan];
for(int index = startScan+1; index < ARRAY_SIZE; index++) {
if(nums[index]< minValue) {
minValue = nums[index];
minIndex = index;
}
nums[minIndex] = nums[startScan];
nums[startScan] = minValue;
}
}
}
你只需要在内部循环之外进行交换。
获取此部分
nums[minIndex] = nums[startScan];
nums[startScan] = minValue;
脱离内循环。
您的代码应如下所示:
void sortNumbers(int nums[], int ARRAY_SIZE) {
int startScan, minIndex, minValue;
for (startScan = 0; startScan < (ARRAY_SIZE-1); startScan++) {
minIndex = startScan;
minValue = nums[startScan];
for(int index = startScan+1; index < ARRAY_SIZE; index++) {
if(nums[index]< minValue) {
minValue = nums[index];
minIndex = index;
}
}
nums[minIndex] = nums[startScan];
nums[startScan] = minValue;
}
}
以下是带有图像和步骤的选择排序的非常清晰的解释:http://www.algolist.net/Algorithms/Sorting/Selection_sort
你所做的事情的概念没有错,我所关注的只是倒数第三个关闭大括号}
的位置。
当内部循环的整个意图是找到要与之交换的元素时,您是否真的想在内部循环内交换?根据定义,在循环完成之前,您无法找到它。
试着自己弄清楚,但如果由于某种原因你不能,请参阅下文:
void sortNumbers(int nums[], int ARRAY_SIZE) {
int startScan, minIndex, minValue;
// For every array index bar the last.
for (startScan = 0; startScan < (ARRAY_SIZE-1); startScan++) {
// Start with minimum at that point.
minIndex = startScan;
minValue = nums[startScan];
// Check against every other array element not yet placed.
for(int index = startScan+1; index < ARRAY_SIZE; index++) {
if(nums[index]< minValue) {
minValue = nums[index];
minIndex = index;
}
}
// Swap when you've found the minimum.
nums[minIndex] = nums[startScan];
nums[startScan] = minValue;
}
}
ALL 排序例程都需要交换值的临时副本。交换。想想这个的必要性。突出的第一件事是我没有看到任何地方交换。你正在粉碎你的价值观,导致它们的重复。你从哪里得到这个设计?
> 2000> 100,您可能会发现 bucketsort -> 计数排序是解决当前问题的合适方法。
编辑:用英语:你有一个100个整数的数组,可以计算输入中的数字
正如其他人所提到的,您的排序甚至没有正确交换值。