编译时,会出现读取访问冲突错误。其他堆栈溢出帖说这是由于无限循环。我还看到该值变为非常大的负数。我的猜测是因为列表[-1],但我不知道如何改变它所以它不会超过列表[0]。
插入排序代码
void insertion_sort(int list[], int length) {
for (int i = 1; i < length; i++) {
for (int j = i; (j > 0) && (list[j] < list[j - 1]); j--) {
swap(list, list[j - 1], list[j]);
}
}
}
交换功能代码
void swap(int list[], int & src, int & dest){
int temp = list[src];
list[src] = list[dest];
list[dest] = temp;
}
答案 0 :(得分:1)
您正在使用排序值作为交换中的索引。保持简单。
这很有效。
void insertion_sort(int list[], int length) {
for (int i = 1; i < length; i++) {
for (int j = i; (j > 0) && (list[j] < list[j - 1]); j--) {
std::swap( list[j - 1], list[j] );
}
}
}
int main( )
{
int arr[ 100 ];
for( size_t i= 0; i < 100; ++i )
arr[ i ]= std::rand( );
insertion_sort( arr, 100 );
return 0;
}
添加了:
因为这看起来像课堂练习。您要注意的是std::swap
不知道您的list
存在。它想要知道的是你想要交换的价值。因此,如果您无法使用标准库,请按标准编写交换。
答案 1 :(得分:0)
void insertion_sort(int list[], int length) {
for (int i = 1; i < length; i++) {
j = i;
while(j > 0 && list[j - 1] > list[j]){
swap(list, list[j], list[j-1]);
j--;
}
}
这应该适用于从最小到最大的排序。 while循环执行检查是否需要交换的工作并检查已经排序的&#34;已排序的&#34;如果需要再次交换数组中的位置。
快乐编码。