当我在Dev C ++中运行这个程序时,它会执行,直到“输入你想要的数组中的元素数量”,当我输入5个数字作为输入时,它会崩溃。 谁能帮我吗? 这是使用c
进行快速排序的实现#include<stdio.h>
#include<stdlib.h>
void swap(int *a,int *b)//function to swap array
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
void quicksort(int arr[],int start,int end)//function for performig quicksort
{
if(start>=end)
{
return;
}
else
{
int pindex= partition(arr,start,end);
quicksort(arr,start,pindex-1);
quicksort(arr,pindex+1,end);
}
}
int partition(int arr[],int start,int end)//function to partition the array
{
int i;
int pivot=arr[end];//always making the last element in the array as pivot
int pindex=arr[start];
for(i=0;i<end;i++)
{
if(arr[i]<=pivot)
{
swap(&arr[i],&arr[pindex]);
}
swap(&arr[pindex],&arr[end]);
}
}
void display(int arr[],int n)//function to display the sorted array
{
int i=0;
for(i=0;i<n;i++)
{
printf("%d",arr[i]);
}
}
void main() // main function initializing here
{
int n,i,arr[20];
printf("enter the no of elements u want in an array");
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&arr[i]);
printf("\n");
}
quicksort(arr,0,n);
display(arr,n);
getch();
}
This is my complete code of quick sort program.i used different functions for different displaying output,swapping numbers partitioning etc.
答案 0 :(得分:2)
发布的代码甚至没有接近编译。
强烈建议编译并启用所有警告
(至少使用gcc:-Wall -Wextra -pedantic
启用警告
修正警告。
然后重新发布代码
仅供参考:
int main( void )
或int main( int argc, char *argv[] )
#include
语句conio.h
头文件不可移植(因此不应使用)
建议使用stdlib.h
void
返回类型的函数都必须具有
return value;
声明函数:getch()
不可移植(因此不应使用)
建议使用getchar()
一般来说,对于代码布局,请使用:
'#include' statements blank line '#define' statements blank line 'static' file scope variables blank line prototypes for all functions except main() blank line 'int main()' function blank line each sub function, separated by a blank line
答案 1 :(得分:0)
给出这段代码:
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&arr[i]);
printf("\n");
}
用户将看到初始输入的提示,然后只有闪烁的光标。
实际值的第二个提示以及仅每行输入一个值的指令将是良好的编码实践。
当调用scanf()(和函数族)时,总是检查返回值(而不是参数值)以确保输入操作成功。
建议,在用户现有的提示中,添加最大值(20)并检查用户输入的值小于21的代码。
建议,初始scanf()将格式说明符更改为&#34;%u&#34;确保用户无法输入负值。
建议,检查用户没有为元素数量输入0
由于用户将以几种不同的方式输入值,如果他们输入了以下内容:
5 1 2 3 4 5
在输入循环中间调用printf()将导致5个空白行插入终端。这是不可取的。
建议从输入循环中删除当前的printf()