我尝试使用c / c ++进行冒泡排序。它显示错误的输出。我不知道错误在哪里。
#include <stdio.h>
#define true 1
#define false 0
int main()
{
int arr[]={26,27,2,38,44,4,19};
int n= sizeof arr/sizeof(int);
int swapped;
int unsorted_index= n-1, temp;
do{
swapped=false;
for(int i=0; i< unsorted_index-1; i++)
if(arr[i]>arr[i+1])
{
temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
swapped=true;
}
unsorted_index--;
} while(swapped || unsorted_index);
for(int i=0; i<n; i++)
printf("%d ",arr[i]);
return 0;
}
它显示输出: 2 4 26 27 38 44 19
代替: 2 4 19 26 27 38 44
答案 0 :(得分:1)
问题是您的循环没有遍历整个数组。为此:
将“ unsorted_index = n-1”替换为“ unsorted_index = n”。
输出:
2 4 19 26 27 38 44
答案 1 :(得分:-1)
正确使用:for(int i = 0; i <= unsorted_index-1; i ++)
代替:for(int i = 0; i