Как настроить раздел без сортировки? - PullRequest
0 голосов
/ 12 октября 2018

У меня проблемы с созданием раздела для заданных входов.Я попробовал две вещи, первая закомментирована, и это просто некоторый базовый псевдокод для алгоритма разбиения, а вторая - то, что я интерпретировал из заметок класса.Прежде всего, основная функция в порядке, которая была дана нам.Мне нужно только закончить кодирование функции раздела.Все, что прокомментировано в функции разделения, - моя первая попытка, все, что не прокомментировано, - моя вторая попытка.

Вот некоторые входные данные, которые мы должны проверить вместе с правильными результатами:

  1. 12 3 4 5 6 7  пивот 4;элементы меньше точки поворота находятся в левой части
  2. 8 7 6 5 4 3 2 1  точка поворота 5;элементы меньше точки поворота находятся в левой части
  3. 5 1 4 3 6 7 8 2  точка поворота равна 3;элементы меньше точки поворота находятся в левой части
  4. 4 3 1 2 7 5  точка разворота 1;левая часть пуста
  5. 2 6 8 4 1 7  пивот равен 8;правая часть пуста

    int partition(int a[], int first, int last) {
    /*  int pivot = a[last / 2];
    //cout << pivot << endl;
    int i = (first - 1);
    
    for (int j = first; j <= last; j++) {
        if (a[j] < pivot) {
            i++;
            //cout << pivot << endl << i << endl << j << endl;
            swap(a[i], a[j]);
        }
    }
    cout << pivot << endl << i << endl << first << endl << last << endl;
    
    //swap(a[i + 1], a[last]);
    return (i + 1);
    }*/
    swap(a[first],a[(first+last)/2]);
    int pivot = a[first];
    
    int i = a[first];
    int j = a[last];
    
    while (i <= j)
    {
       if (pivot > a[i])
       {i++;}
       if (pivot < a[j])
       {j--;}
    
       if (i <= j)
       {swap(a[i],a[j]);}
    }
    swap(pivot, a[j]);
    return i;
    }
    
    
    int main()
    {
    int x;  // number of elements
    int nums[10];
    cout << "How many elements would you like to enter into the array? (must 
    be less than 10): ";
    cin >> x;
    cout << "Enter the elements one per line" << endl;
    for (int i = 0; i < x; i++)
    { cin >> nums[i]; }
    
    
    int pivot_index = partition(nums, 0, x-1);
    
    cout << "The array was partitioned" << endl;
    // display up to the pivot without endl
    for (int i = 0; i < pivot_index; i++)
        cout << nums[i] << " ";
    
    // display the pivot
    cout << "| " << nums[pivot_index] << " | " ;
    
    // display from the pivot without endl
    for (int i = pivot_index+1; i < x; i++)
        cout << nums[i] << " ";
    
    cout << endl;
    

    }

...