Неполностью сортирует массив

  • Автор темы PrimatYarik
  • Дата начала
P

PrimatYarik

Гость
#1
Задача состоит в том, чтоб пользователь ввел английский алфавит с клавиатуры, программа должна разделить на гласные и согласные.
После чего Сортировать оба списка по алфавиту и вывести на екран. У меня все работает кроме одного пункта: Если повторить сортировку 2 раза то все правильно, но вот если один - сортирует массив весь кроме первого елемента :( Почему неполностью сортирует массив? Вот исходник:
C++:
#include <conio.h>
#include <iostream>
using namespace std;

char sort(char array[], int col){ //Ф-ция сортировки пузырьком
int i, k, j;
char men, bil; //переменные для большего и менньшего значений
for(i=1, j=0, k=0; k<=col; i++, j++){
if(array[i] < array[j]){
men = array[i];
bil = array[j];
array[j] = men;
array[i] = bil;
}		 
if(i==col){ 
k++; 
i=1; 
j=0;}  
}
}

bool isGl(char ch){ //возвращает true если переменная содержит гласную
return (ch == 'a' || ch == 'i' || ch == 'e' || ch == 'o' || ch == 'y' || ch == 'u');
}
bool isSogl(char ch){ //возвращает true если переменная содержит согласную
return (ch == 'b' || ch == 'c' || ch == 'd' || ch == 'f' || ch == 'g' || ch == 'h' || ch == 'j' || ch == 'k' || ch == 'l' || ch == 'm' || ch == 'n' || ch == 'p' || ch == 'q' || ch == 'r' || ch == 's' || ch == 't' || ch == 'v' || ch == 'w' || ch == 'x' || ch == 'z');
}


main(){

char vvod[26]; //массив для ввода
char gl[6]; //массив для гласных
char sgl[20]; //массив для согласных
M1: int i, k=0, j=0, key;
cout<<"Enter english alfavet:\n";

for(i=0; i<=25; i++){
cin>>vvod[i];
}

for(i=0; i<=25; i++){
if(isGl(vvod[i])) {gl[k] = vvod[i]; k++;} 

if(isSogl(vvod[i])) {sgl[j] = vvod[i]; j++;}

}

gl[6] = sort(gl, 5); 
sgl[20] = sort(sgl, 19); 


cout<<"Glasnie:\n";
for(i=0; i<6; i++){
cout<<gl[i]<<"\n";
}
cout<<"Soglasnie:\n";
for(i=0; i<20; i++){
cout<<sgl[i]<<"\n";
}
getch();
}
Замечание от модератора OKEN: Дубликат темы - Проблема с сортировкой массива
 

lazybiz

Well-Known Member
03.11.2010
1 339
0
#2
bool isGl(char ch){ //возвращает true если переменная содержит гласную
bool isSogl(char ch){ //возвращает true если переменная содержит согласную
А третий вариант существует?

Попробуй вот такой подход:
Код:
void sort( char array[], int col )
{
int	i, flag = 1;
while ( flag ) {
flag = 0;
for ( i = 0; i < col - 1; i++ ) {
if ( array[i] > array[i + 1] ) {
array[i] ^= array[i+1] ^= array[i] ^= array[i+1];
flag = 1;
}
}
}
}