2015-01-14 6 views
1

Моя первая лаборатория программирования - это алгоритм сортировки для сортировки массива символов. Я успешно делаю это, используя два цикла, но чтобы улучшить свои навыки, я хочу знать, есть ли способ сделать это, используя цикл while и цикл 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; 
} 

EDIT: Вот psuedocode написал наш TA:

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

Так что я действительно хотел бы знать, как я могу интегрировать логические операторы в то время цикла?

ответ

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++; 
} 
+3

Эти внутренние 3-мя строками наверняка выглядят как std :: swap;) – CoryKramer

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++; 
} 
2

В общем, for цикл, как: for (a; b; c) d почти эквивалентен коду, как:

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

Есть целый несколько незначительные отличия, но для того, с чем вы имеете дело, они, вероятно, не имеют отношения к делу.

Смежные вопросы