【发布时间】:2018-02-25 03:14:03
【问题描述】:
我正在尝试按降序进行冒泡排序,但我不断得到奇怪的输出。当我在数组中输入元素时,对于元素 1,它不止一次向我询问元素 1,它会导致一个额外的元素被引入,另一件事是最终元素根本不包含在数组中,我不明白。这是我完整程序的输出,我的代码在它下面:
输入:
How many elements in your array?: 4
Enter elements in your array:
Element 0:
97
32
Element 1:
13
Element 2:
22
Element 3:
244
Element 0: 32
Element 1: 13
Element 2: 22
Element 3: 0
我的代码:
#include <stdio.h>
void sort(int array[], int n);
int main() {
int num = 0;
printf("How many elements in your array?: ");
scanf("%d",&num);
while(num > 9)
{
printf("Only enter an array that is size 9 or less.\n");
printf("Enter a new number: ");
scanf("%d", &num);
}
int array[num];
printf("Enter elements in your array: \n");
for(int i = 0; i < num; i++)
{
printf("Element %d: \n",i);
scanf("%d ",&array[i]);
}
sort(array, num);
for(int j = 0; j < num; j++)
{
printf("Element %d: %d\n", j, array[j] );
}
return 0;
}
void sort(int array[], int size)
{
int temp;
for(int i = 0; i < size; i++)
{
/*if(array[i] > array[i+1]) // smallest to biggest
{
*temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
}*/
if(array[i] > array[i+1]) // 1 2
{
temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
}
}
}
【问题讨论】:
-
不要使用
scanf进行用户输入。这是你问题的一半。 -
如果输入-1会发生什么?
-
您的
sort溢出缓冲区,因为当i是size -1时,array[i+1]超出了限制。因此,您正在与一个会影响排序的未定义值进行比较。这也不是冒泡排序,您只是对相邻条目进行排序,而不是全部排序。 -
scanf("%d ",&array[i]);去掉%d后面的空格。然后注释掉对sort的调用,并确保您至少从一个好的数组开始。