【发布时间】:2014-10-29 20:45:07
【问题描述】:
我在 c-99 脚本中使用以下快速排序。
问题是它可以编译但没有任何输出。我正在尝试将 5,4,3,2,1 分类为 1,2,3,4,5 我什么也没得到。
我不确定我做错了什么。
这是我的代码
\\pick a pivot
\\make a temporary left and right list
\\filter items to left and to the right
\\put it all back into the array left and pivot
\\recurse right side
#include <time.h>
#include <stdlib.h>
void subquicksort(int array[], int start, int end){
int leng=end-start;
if (leng<=1){
return;
}
int pivot=array[start];
int leftlist[leng]; \\create temporary left and right list
int lindex=0;
int rightlist[leng];
int rindex=0;
for(int i=start + 1; i < leng; i++){
if(array[i]<pivot) {
leftlist[lindex++]=array[i];
}
else{
rightlist[rindex++]=array[i];
}
}
array[start + lindex]=pivot;
for( int i=start +1; i <leng; i++){
if (i<lindex){
array[start + i]=leftlist[i];
}
if(i==lindex){
continue;
}
if(i>lindex){
array[start + i]=rightlist[i-lindex-1];
}
}
subquicksort(array,start,start+lindex);
subquicksort(array,start+lindex+1,end);
}
void quicksort(int array[],int leng){
subquicksort(array,0,leng);
}
int main(){
int nums[] = {5,4,3,2,1};
quicksort(nums, 5); \\use the quicksort function and print out the values sorted
for(int i=0;i<6;i++){
printf("%d",nums[i]);
}
return 0;
}
【问题讨论】:
-
使用标准 qsort(3)。如果是作业:编译所有警告和调试信息 (
gcc -Wall -Wextra -g) 然后使用调试器 (gdb) -
是的,你的代码很难看。
-
好的,我会尝试格式化
-
1) 在第一个 for 循环
for(int i=start + 1; i < leng; i++){:i < leng;应该是i < end2)i<6-->i<5 -
3) 在第二个 for 循环
leftlist[i];:i从 0 开始。