C++ 冒泡排序不排序
我试图实现冒泡排序,但最终列表根本没有排序 看起来是这样的,我找不到错误:C++ 冒泡排序不排序,c++,C++,我试图实现冒泡排序,但最终列表根本没有排序 看起来是这样的,我找不到错误: void sort(int values[], int n) { //Printing unsorted list for(int l = 0; l < n; l++) { printf("Unsorted %i \n", values[l]); } // Implement Bubble sort for(int j = 0; j <= n-
void sort(int values[], int n)
{
//Printing unsorted list
for(int l = 0; l < n; l++)
{
printf("Unsorted %i \n", values[l]);
}
// Implement Bubble sort
for(int j = 0; j <= n-1; j++)
{
int swaps = 0;
int k = 0;
for(int i = 0; i < n - k; i++)
{
if(values[i] > values[i+1])
{
swap(&values[i], &values[i+1]);
swaps++;
printf("swaps: %i\n", swaps);
//Printing sorted list
for(int m = 0; m < n; m++)
{
printf("Sorted %i \n", values[m]);
}
}
if(swaps == 0)
{
return;
}
k++;
}
}
}
排序后的列表如下所示:
Sorted 17
Sorted 34
Sorted 12
Sorted 33
Sorted 51
Sorted 56
Sorted 11
Sorted 31
Sorted 16
Sorted 55
PS:交换功能正在工作,我已经测试过了。提示
如果
swaps==0
,此循环仍然不起作用。考虑集合<代码> { 17, 40, 39,41 } < /代码>。第一个元素未发生交换,但它仍然未排序。我看到的代码的主要问题是
for(int i = 0; i < n - k; i++)
{
if(values[i] > values[i+1])
{
swap(&values[i], &values[i+1]);
swaps++;
printf("swaps: %i\n", swaps);
//Printing sorted list
for(int m = 0; m < n; m++)
{
printf("Sorted %i \n", values[m]);
}
}
if(swaps == 0)
{
return;
}
k++;
}
我认为在第二个循环中存在问题 索恩
int-temp;
对于(int j=0;j值[i+1])
{
温度=数值[i];
值[i]=值[i+1];
数值[i+1]=温度;
交换++;
如果你知道冒泡排序的概念,你可以自己一行一行地浏览函数;错误很容易被发现。有些人只是不愿意帮忙。如果我能自己找到错误,用调试器或者只是查看一下,我就不会发布了here@JoaoTurolla有些人不想工作,因为这样比较容易提问而不是自己调试。问题是-你只有在工作时才学会如何编程,而不是在你从别人那里得到答案时。是的,我在错误的地方打印了。但是,我不明白为什么你把if(swaps==0){return;}
放在第一个循环(带J的循环)之外.因为我把我的设置在第一个循环的内部和第二个循环的外部work@JoaoTurolla,是的,你是对的,因为如果在使用j
的for循环的第一次迭代中没有交换,那么就不需要检查它的其余部分。我实际上没有编译它,而是通过查看我看到的问题来编写它(我提到这是一个可能的解决方案,并不意味着它是最有效的)这就是为什么我错过了它。但是现在,我编译了它,并且还喜欢k
的一个错误,你不需要k
,它不适用于特殊情况,所以我删除了它。看看更新的答案。
for(int i = 0; i < n - k; i++)
{
if(values[i] > values[i+1])
{
swap(&values[i], &values[i+1]);
swaps++;
printf("swaps: %i\n", swaps);
//Printing sorted list
for(int m = 0; m < n; m++)
{
printf("Sorted %i \n", values[m]);
}
}
if(swaps == 0)
{
return;
}
k++;
}
int swaps = 0;
for(int j = 0; j < n - 1; j++)
{
for(int i = 0; i < n - 1 ; i++)
{
if(values[i] > values[i+1])
{
swap(&values[i], &values[i+1]);
swaps++;
}
}
if(swaps == 0)
{
break;
}
}
printf("swaps: %i\n", swaps);
if(swaps == 0)
{
return;
}
//Printing sorted list
for(int m = 0; m < n; m++)
{
printf("Sorted %i \n", values[m]);
}
int temp;
for(int j = 0; j <= n-1; j++)
{
int swaps = 0;
int k = 0;
for(int i = 0; i < n - j; i++)
{
if(values[i] > values[i+1])
{
temp=values[i];
values[i]=values[i+1];
values[i+1]=temp;
swaps++;
cout<<"swaps:"<<swaps<<"\n";
}
}
}
for(int m = 0; m < n; m++)
{
cout<<"Sorted "<<values[m]<<"\n";
}