我试图实现冒泡排序算法使用递归排序的整数数组。但是,在编译和运行代码时,我总是遇到分段错误。我试过调试它,但我找不到问题。
#include <stdio.h>
#define ARR_SIZE 10
//primitive function
void bubble_sort(int array[]);
//sort the number array using bubble sort
int main(void)
{
int array[] = {4,2,9,3,2,4,9,10,20,4};
bubble_sort(array);
for (int i = 0; i < ARR_SIZE ; i++)
{
printf("%i\n", array[i]);
}
}
void bubble_sort(int array[])
{
int swap_counter = 0;
for (int i = 0; i < ARR_SIZE - 2; i++)
{
if (array[i] >= array[i + 1])
{
swap_counter++;
int temp = array[i];
array[i] = array[i + 1];
array[i + 1] = temp;
}
}
if (swap_counter != 0)
{
bubble_sort(array);
}
else
{
return;
}
}
1条答案
按热度按时间ffscu2ro1#
正如上面的注解中所指出的,当第一个整数元素大于或等于第二个整数元素时,该函数似乎执行交换并随后递归调用排序函数。当元素相等时,似乎不需要执行交换和调用。在进行重构时,“for”循环并没有测试出整数数组中的最后一个元素。
下面是我重构的两个代码片段,它们似乎使用递归调用来执行冒泡排序功能,而不是重新发布一个完全重构的程序。
代替以下声明:
使用以下尺寸测试:
而且,当两个数组元素相等时,不执行交换:
只有当第一个元素实际上大于第二个元素时,才执行交换和递归调用:
当我用这些重构位测试你的代码时,下面是没有溢出问题的终端输出。
给予一个测试。