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

Тема в разделе "C и С++ FAQ", создана пользователем PrimatYarik, 16 дек 2010.

  1. PrimatYarik

    PrimatYarik Гость

    Задача состоит в том, чтоб пользователь ввел английский алфавит с клавиатуры, программа должна разделить на гласные и согласные.
    После чего Сортировать оба списка по алфавиту и вывести на екран. У меня все работает кроме одного пункта: Если повторить сортировку 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: Дубликат темы - Проблема с сортировкой массива
     
  2. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    А третий вариант существует?

    Попробуй вот такой подход:
    Код (Text):
    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;
    }
    }
    }
    }
     

Поделиться этой страницей