【发布时间】:2015-09-01 06:57:48
【问题描述】:
我编写了以下 C99 代码来对固定数组执行快速排序。但是,在打印初始数组后,它给出了分段错误。我现在没有任何调试器,我使用 KWrite,然后使用终端来编译和运行。这是代码。
#include <stdio.h>
#define LEN 8
int arr[8] = {3,5,7,1,2,4,6,8};
void printarr()
{
printf("\n");
for (int i = 0; i<LEN; i++)
printf("\t %d", arr[i]);
printf("\n");
}
void quicksort(int _left,int _right)
{
int left = _left;
int right = _right;
int pivot = (left+right)/2;
while (left<=right)
{
while(pivot>arr[left])
left--;
while (pivot<arr[right])
right++;
if(left<=right)
{
int temp = arr[right];
arr[right] = arr[left];
arr[left] = arr[temp];
left++;
right--;
}
}
if (_left<right)
quicksort(_left, right);
else
quicksort(left, _right);
}
int main()
{
int left = 0, right = LEN-1;
printf("Unsorted array:");
printarr();
quicksort(left,right);
printf("Sorted array:");
printarr();
}
请看一下,让我知道代码的哪一部分导致了这个问题。
【问题讨论】:
-
嗯,首先,您正在比较
pivot,一个在left和right(也是索引)之间计算的索引,与值 来自数组(arr[left]和arr[right])。还是太明显了?这需要调试器的业务端。 -
你应该已经安装了gdb,使用它。 BTW KWrite 不是程序员的编辑器,它是一个文字处理器。你最好使用 Kate。
-
KWrite 和 Kate 使用相同的文本编辑器引擎,它也用于 KDevelop,但与 KWrite 相比,Kate 确实对项目中的多个文件和内置代码完成等事情有更好的处理。 KWord,或今天的 Calligra Words,更像是一个文字处理器。
-
调试的第一步:使用尽可能简单的测试用例。从对单元素列表进行排序开始。它非常简单,您无需编译即可手动浏览代码。
标签: c gcc fedora quicksort c99