【发布时间】:2019-03-08 06:30:17
【问题描述】:
下面是我的 C++ 代码。我正在尝试使用指针(开始和结束)实现选择排序。代码可以编译,但在对随机生成的列表进行排序之前出现分段错误(目前只打印随机数)。
任何关于为什么会这样以及如何解决它的帮助将不胜感激。
#include<stdio.h>
#include<stdlib.h>
#include <iostream>
using namespace std;
void selectionSort(int *start, int *stop) {
for (int i = *start; i < *stop - 1; ++i) {
int min = i;
for (int j = i + 1; j < *stop; ++j) {
if ((&start[0])[j] < (&start[0])[min])
min = j;
}
swap((&start[0])[i], (&start[0])[min]);
}
}
int main()
{
int size = 10;
int* data = new int[size];
for (int i = 0; i < size; ++i)
{
data[i] = rand() % size;
}
for (int k = 0; k < size; k++)
{
cout << data[k] << " ";
}
cout << endl;
selectionSort(data, data+size);
for (int j = 0; j < size; j++)
{
cout << data[j+1] << " ";
}
return 0;
}
【问题讨论】:
-
小心标记的方式。您的代码示例显然不是 C,以至于您会惹恼 C 标签所吸引的一些 C 程序员。
-
当
j是size-1时j+1是什么? -
这里需要使用指针吗? C++ 的引用应该能够轻松地处理您正在做的事情。
-
for (int i = *start;不,这不是您遍历数组的方式。编写一个单独的min函数,调试并测试它。然后在你的sort中使用一个 -
swap((&start[0])[i], (&start[0])[min]);措辞很奇怪。&start[0]和start是一样的,所以你可以写(大多数人都希望读)swap(start[i], start[min]);
标签: c++ sorting pointers selection-sort