貌似去掉数组中的重复数卜槐圆字型塌,但是当出现连续两个以上重复的数字时后出错。
如{1,2,2,2,3,4,2,2,3,5}结果就成了1 2 2 3 4 5
这是因为
for(k=jk<10-nk++)
a[k]=a[k+1]
没有考虑到连续数字的问题。
因为C语言是不检查数组越界的,你的排序程序访问了数组以外的元素,所以会排序后数组元素改变了.
排序程序哪里访问了数组外的元素呢,这里,在insert函数中,for循环,当i=num-1时,j>=num-i-1也就是j>=0当j等于0时,arr[j-1]就等伏前于arr[-1],就访问到数组外的元素了.
解决办法也很简单,把insert函数中,for-j循环中的 j>=num-i-1改成j>num-i-1去掉等于号就行了.
完整的C语言程序如下(改动的地方见注释)
#include <stdio.h>#define N 10
void insert(int [],int)
int main()
{
粗厅漏int arr[]={56,12,865,126,487,3,1323,657,34,6}
int i
printf("排序前:\n")
for(i=0i<Ni++)
{
printf("%d ",arr[i])
}
insert(arr,N)
printf("\n排序后:\n")
for(i=0i<Ni++)
{
printf("%d ",arr[i])
}
printf("\n")
return 0
}
void insert(int arr[],int num)
{
int temp,i,j
for(i=num-1i>=0i--)
{
for(j=num-1j>num-i-1j--) //这里把j>岩烂=num-i-1改成j>num-i-1
{
if(arr[j-1]<arr[j])
{
temp=arr[j-1]
arr[j-1]=arr[j]
arr[j]=temp
}
}
}
}
运行结果
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)