使用while循环和for循环排序?

时间:2015-01-14 17:55:11

标签: c++ sorting for-loop optimization while-loop

我的第一个编程实验室是对排序字符数组进行排序算法。我使用两个for循环成功地完成了它,但是为了提高我的技能,我想知道是否有办法使用while循环和for循环来实现它?

//Include any needed libraries
 #include <iostream>
 #include <algorithm>
 #include <iterator>

//Specify the standard namespace
using namespace std;

int main(){
//Initializes variables.

char foo[7] = {'a','c','g','j','a','c','d'};
//char foo[7];
bool sorted =false;
int i = 0;
int j = 0;
char temp;

//Print out the pre-sorting array. 
cout << "The array before sorting is: ";
for (int i=0; i<7; i++){
    cout << foo[i];
}
cout << endl;



//The swap function. 
    for(i=0;i<7;i++){
        for (j=0; j<7;j++){
            if(foo[i]<foo[j]){
                temp = foo[i];              
                foo[i] = foo[j];
                foo[j] = temp;
            }
        }
    }
}

cout << "The array after sorting is: ";
for (int i=0; i<7; i++){
    cout << foo[i];
}

cout << endl;


return 0;
} 

编辑:这是我们的TA编写的伪代码:

array[];
bool sorted = false;
while(!sorted){
   sorted = true;
   for each element{
      compare
      swap
   if swapped: sorted = false
}

所以我真正想知道的是如何在while循环中集成布尔语句?

3 个答案:

答案 0 :(得分:2)

你可以试试这个:

int i = 0;
while (i < 7)
{
    for (j = 0; j < 7; j++)
    {
        if(foo[i] < foo[j])
        {
            temp = foo[i];              
            foo[i] = foo[j];
            foo[j] = temp;
        }
     }
i++;
}

答案 1 :(得分:2)

通常,像for这样的for (a; b; c) d循环几乎等同于以下代码:

a;
while (b) {
    d;
    c;
}

很少微小差异,但对于你正在处理的事情,它们可能是无关紧要的。

答案 2 :(得分:0)

您可以使用等效的for循环替换while个循环。

for(i=0;i<7;i++)
{
    j = 0;
    while( j<7)
    {
        if(foo[i]<foo[j])
        {
            temp = foo[i];              
            foo[i] = foo[j];
            foo[j] = temp;
        }
      j++
    }
}

如果你选择转换外循环,那么

int i = 0;
while (i < 7)
{
  for (j = 0; j < 7; j++)
  {
      if(foo[i] < foo[j])
      {
          temp = foo[i];              
          foo[i] = foo[j];
          foo[j] = temp;
      }
   }
   i++;
 }