我正在尝试使用下面的插入排序,但是我收到“由于超时而终止”的错误。可能是什么原因呢?我已经分别为Print打印了prin函数。
示例输入
6
1 4 3 5 6 2
示例输出
1 4 3 5 6 2
1 3 4 5 6 2
1 3 4 5 6 2
1 3 4 5 6 2
1 2 3 4 5 6
程序
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <assert.h>
void prin(int ar_size,int* ar);
void insertionSort(int ar_size,int* ar) {
int i=1;
for (i;i<=ar_size;i++)
{
prin(ar_size, ar);
int j=0;
while(j<i)
{
if(*(ar+i) < *(ar+j))
{
int temp;
temp= *(ar+j);
*(ar+i)= *(ar+j);
*(ar+j)= temp;
j++;
}
}
}
}
void prin(int ar_size,int* ar)
{
int p;
printf("\n");
for(p=0; p < ar_size;p++)
{
printf("%d ",*(ar+p));
}
}
int main(void) {
int ar_size;
scanf("%d", &ar_size);
//int* _ar=(int*) calloc(_ar_size,sizeof(int)); //Tried this and below decleration but i get the same error
int _ar[ar_size], _ar_i;
for(_ar_i = 0; _ar_i < ar_size; _ar_i++) {
scanf("%d", &_ar[_ar_i]);
}
insertionSort(ar_size,_ar);
return 0;
}
答案 0 :(得分:0)
j
中的insertionSort
仅在该条件内递增。该程序很可能永远在while (j<i)
循环内循环。