我写了一个程序来运行插入排序算法。一切似乎都很好。 但是当我执行它时,有一个奇怪的结果。 似乎程序在内存中使用垃圾。 我该如何解决它?
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void insertion_inc(int Array[], int size)
{
int i, j, key;
for (i = 1; i < size; i++)
{
j = i - 1;
key = Array[i];
while (j >=0 && Array[j]>key )
{
Array[j + 1] = Array[j];
j--;
}
Array[j++] = key;
}
}
void insertion_dec(int Array[], int size)
{
int i, j, key;
for (i = 1; i < size; i++)
{
j = i - 1;
key = Array[i];
while (j >= 0 && Array[j] < key)
{
Array[j + 1] = Array[j];
j--;
}
Array[j++] = key;
}
}
void print_array(int arr[], int size)
{
for (int i = 0; i < size; i++)
printf(" %d ", arr[i]);
}
/////////////////////////////////////////////
int main()
{
time_t t;
srand((unsigned)time(&t));
int Arr[10];
int size = sizeof(Arr);
printf("The unsorted Array : n ");
for (int i = 0; i < size;i++)
Arr[i] = rand()/10;
print_array(Arr, size);
printf("nnn The sorted Array : n");
insertion_inc(Arr, size);
print_array(Arr, size);
return 0;
}
输出始终如下所示:**
未排序的数组:
1223 54 87 2 68 29 57 97 12 -858993460 272204808 7601072 7742451 1 15039136 15044096 1 15039136 15044096 7601164 7742023 272204692 7738189 7738189 8462336 0 0 0 0 0 0 0 0 0 0 0 7775604 7775616 0 7601080 0 7601272
排序数组:
23 23 23 23 23 23 23 23 23 23 23 23 2323 23 57 68 7601272 7738189 7738189 7738189 7742023 7775616 8462336 8462336 8462336 15039136 15039136 15039136 15039136 15044096 272204692 272204808 272204808 272204808 272204808 272204808 272204808 272204808 272204808
即使我忽略了srand()
和rand()
的使用,仍然存在问题。
这一行:
int size = sizeof(Arr);
不做你认为它做的事情。它返回以字节为单位的大小,而不是元素。
请参阅如何在 C 语言中确定数组的大小?
您没有正确计算数组大小:
int size = sizeof(Arr);
sizeof
运算符给出其操作数的大小(以字节为单位(。 因此,假设系统上的int
为 4 个字节,则sizeof(Arr)
计算结果为 40。
相反,您希望将数组的大小除以数组中元素的大小,以获得元素的数量。
int size = sizeof(Arr) / sizeof(*Arr);