Shell C 中的整数数组排序
Shell sort of integer array in C
我是 C 的新手,正在尝试学习 shell sorting.I 我正在尝试按升序对整数数组进行排序 order.Here 是我的代码-
#include <stdio.h>
main()
{
int a[] = {1, 9, 7, 4, 8, 6, 7,2,1,6 };
int n =10; //array length
for (int c = (n / 2); c > 0; c = c / 2)
{
for (int i = c; c < n; i++)
{
int t = a[i];
int j;
for (j = i;( j >= c) && (t < a[j - c]); j = j - c)
{
a[j] = a[j - 1];
}
a[j] = t;
}
}
for (int i = 0; i <= 9; i++)
{
printf("%d ", a[i]);
}
}
在 Visual Studio 中编译此代码时,出现一条错误消息,要求关闭或调试,并且输出终端不显示任何内容 output.I 无法弄清楚这里有什么问题 code.I 如果有人能解释一下,我将不胜感激,或许还能指出一个可以满足我要求的解决方案。
try to add this code....
#include<stdio.h>
#include<conio.h>
int main()
{
int arr[30];
int i,j,k,tmp,num;
printf("Enter total no. of elements : ");
scanf("%d", &num);
for(k=0; k<num; k++)
{
printf("\nEnter %d number : ",k+1);
scanf("%d",&arr[k]);
}
for(i=num/2; i>0; i=i/2)
{
for(j=i; j<num; j++)
{
for(k=j-i; k>=0; k=k-i)
{
if(arr[k+i]>=arr[k])
break;
else
{
tmp=arr[k];
arr[k]=arr[k+i];
arr[k+i]=tmp;
}
}
}
}
printf("\t**** Shell Sorting ****\n");
for(k=0; k<num; k++)
printf("%d\t",arr[k]);
getch();
return 0;
}
您的代码几乎是正确的,只需将 for (int i = c; c < n; i++)
替换为 for (int i = c; i < n; i++)
'c' 将始终小于 'n' 这就是您的代码陷入无限循环的原因。
我是 C 的新手,正在尝试学习 shell sorting.I 我正在尝试按升序对整数数组进行排序 order.Here 是我的代码-
#include <stdio.h>
main()
{
int a[] = {1, 9, 7, 4, 8, 6, 7,2,1,6 };
int n =10; //array length
for (int c = (n / 2); c > 0; c = c / 2)
{
for (int i = c; c < n; i++)
{
int t = a[i];
int j;
for (j = i;( j >= c) && (t < a[j - c]); j = j - c)
{
a[j] = a[j - 1];
}
a[j] = t;
}
}
for (int i = 0; i <= 9; i++)
{
printf("%d ", a[i]);
}
}
在 Visual Studio 中编译此代码时,出现一条错误消息,要求关闭或调试,并且输出终端不显示任何内容 output.I 无法弄清楚这里有什么问题 code.I 如果有人能解释一下,我将不胜感激,或许还能指出一个可以满足我要求的解决方案。
try to add this code....
#include<stdio.h>
#include<conio.h>
int main()
{
int arr[30];
int i,j,k,tmp,num;
printf("Enter total no. of elements : ");
scanf("%d", &num);
for(k=0; k<num; k++)
{
printf("\nEnter %d number : ",k+1);
scanf("%d",&arr[k]);
}
for(i=num/2; i>0; i=i/2)
{
for(j=i; j<num; j++)
{
for(k=j-i; k>=0; k=k-i)
{
if(arr[k+i]>=arr[k])
break;
else
{
tmp=arr[k];
arr[k]=arr[k+i];
arr[k+i]=tmp;
}
}
}
}
printf("\t**** Shell Sorting ****\n");
for(k=0; k<num; k++)
printf("%d\t",arr[k]);
getch();
return 0;
}
您的代码几乎是正确的,只需将 for (int i = c; c < n; i++)
替换为 for (int i = c; i < n; i++)
'c' 将始终小于 'n' 这就是您的代码陷入无限循环的原因。