打破冒泡排序循环
breaking the bubble sort loop
在我可以将浮点数放入数组之后。我决定进行冒泡排序。并在交换发生时显示每个结果
#include <stdio.h>
void print_array(float *number, int m){
int i;
for (i=0;i<m;i++){
printf("%.2f ",number[i]);
}
}
void swap(float *a, float *b)
{
float temp = *a;
*a = *b;
*b = temp;
}
int main()
{
unsigned int i,j,m;
int flag = 0;
printf("Input Size of Array : ");
scanf("%d",&m);
float number[m];
for(i=0;i<m;i++){
printf("Number %d : ",i+1);
scanf("%f",&number[i]);
}
printf("\nBefore Sort => ");
for(i=0;i<m;i++){
printf("%.2f ",number[i]);
}
printf("\n\n");
for(i=0;i<m;i++)
{
for(j=0;j<m-i-1;j++)
{
if(number[j] < number[j+1])
{
swap(&number[j],&number[j+1]);
flag = 1;
}
}
if(flag==0)
{
break;
}
printf("Sort # %d => ",i+1);
print_array(number,m);
printf("\n");
}
printf("\n--- Sort End ---");
}
我测试了一下,发现 flag==00 并没有停止循环。即使数组中没有更多交换。
排序完成后如何打破循环?
在第一个循环中初始化标志值。
int flag;
for(i=0; i<m; i++)
{
flag = 0;
for(j=0; j<m-i-1; j++)
{
if(number[j] < number[j+1])
{
swap(&number[j],&number[j+1]);
flag = 1;
}
}
if(flag==0)
{
break;
}
printf("Sort # %d => ",i+1);
print_array(number,m);
printf("\n");
}
对于每次迭代,如果没有交换操作,您希望停止。
因此,在 运行 进行交换的循环之前,您必须启动标志值。
在我可以将浮点数放入数组之后。我决定进行冒泡排序。并在交换发生时显示每个结果
#include <stdio.h>
void print_array(float *number, int m){
int i;
for (i=0;i<m;i++){
printf("%.2f ",number[i]);
}
}
void swap(float *a, float *b)
{
float temp = *a;
*a = *b;
*b = temp;
}
int main()
{
unsigned int i,j,m;
int flag = 0;
printf("Input Size of Array : ");
scanf("%d",&m);
float number[m];
for(i=0;i<m;i++){
printf("Number %d : ",i+1);
scanf("%f",&number[i]);
}
printf("\nBefore Sort => ");
for(i=0;i<m;i++){
printf("%.2f ",number[i]);
}
printf("\n\n");
for(i=0;i<m;i++)
{
for(j=0;j<m-i-1;j++)
{
if(number[j] < number[j+1])
{
swap(&number[j],&number[j+1]);
flag = 1;
}
}
if(flag==0)
{
break;
}
printf("Sort # %d => ",i+1);
print_array(number,m);
printf("\n");
}
printf("\n--- Sort End ---");
}
我测试了一下,发现 flag==00 并没有停止循环。即使数组中没有更多交换。
排序完成后如何打破循环?
在第一个循环中初始化标志值。
int flag;
for(i=0; i<m; i++)
{
flag = 0;
for(j=0; j<m-i-1; j++)
{
if(number[j] < number[j+1])
{
swap(&number[j],&number[j+1]);
flag = 1;
}
}
if(flag==0)
{
break;
}
printf("Sort # %d => ",i+1);
print_array(number,m);
printf("\n");
}
对于每次迭代,如果没有交换操作,您希望停止。
因此,在 运行 进行交换的循环之前,您必须启动标志值。