Форум программистов, компьютерный форум CyberForum.ru

Быстрая сортировка с разделением - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Шаблон дерева. Оператор ввода http://www.cyberforum.ru/cpp-beginners/thread294770.html
Здравствуйте. Не могу перегрузить оператор ввода в шаблонном классе дерева. Идей что-то совсем нет ни один кода, что я пытался написать не компилировался. Помогите, пожалуйста. Вот сам класс. #pragma once #include <iostream> using namespace std; template <class T> struct Elem { T info; Elem *left, *right;
C++ Определить, является ли она магическим квадратом, т.е. такой, в которой суммы элементов во всех строках и столбцах одинаковы. Дана целая квадратная матрица n-го порядка. Определить, является ли она магическим квадратом, т.е. такой, в которой суммы элементов во всех строках и столбцах одинаковы. http://www.cyberforum.ru/cpp-beginners/thread294768.html
Записать на место отрицательных элементов матрицы нули, а на место положительных – единицы. C++
Дана квадратная матрица A. Записать на место отрицательных элементов матрицы нули, а на место положительных – единицы.
C++ ЕГЭ Информатика
На вход программы подаются прописные латинские буквы, ввод этих символов заканчивается точкой. Напишите эффективную по времени работы и по используемой памяти программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет определять, можно ли переставить эти буквы так, чтобы получился палиндром (палиндром читается одинаково слева направо и справа...
C++ ошибка в коде.положение 2ух точек относительно прямой http://www.cyberforum.ru/cpp-beginners/thread294732.html
попытался написать код, но выдает 3 ошибки((((((( вот код: #include "stdafx.h" #include <iostream> #include <stdio.h> #include <cmath> #include <list> #include <vector> #include <algorithm>
C++ структуры Найти три различные точки из заданного множества пространства точек, образующих треугольник наибольшего периметра. Прошу решить задачу через обычные библиотеки iostream и cmath так как других не знаю. подробнее

Показать сообщение отдельно
blackbanny
128 / 115 / 2
Регистрация: 14.11.2010
Сообщений: 707
13.05.2011, 20:42     Быстрая сортировка с разделением
вот рабочий код, используй итеративный алгоритм:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include <cstdlib>
#include <iostream>
#define MAXSTACK 2048
using namespace std;
 
 
using namespace std;
int *a = new int[10]; //выделяем память под массив из 10 элементов
 
void qSortI(int size) {
 
  int i, j;             // указатели, участвующие в разделении
  
  int lb, ub;       // границы сортируемого в цикле фрагмента
 
  int lbstack[MAXSTACK], ubstack[MAXSTACK]; // стек запросов
                        // каждый запрос задается парой значений,
                        // а именно: левой(lbstack) и правой(ubstack) 
                        // границами промежутка
 
  int stackpos = 1;     // текущая позиция стека
  int ppos;            // середина массива
  int pivot;              // опорный элемент
  int temp; 
 
  lbstack[1] = 0;
  ubstack[1] = size-1;
 
  do {
 
    // Взять границы lb и ub текущего массива из стека.
 
    lb = lbstack[ stackpos ];
    ub = ubstack[ stackpos ];
    stackpos--;
 
    do {
      // Шаг 1. Разделение по элементу pivot
 
      ppos = ( lb + ub ) >> 1;
      i = lb; j = ub; pivot = a[ppos];
 
      do {
        while ( a[i] < pivot ) i++;
        while ( pivot < a[j] ) j--;
 
        if ( i <= j ) {
          temp = a[i]; a[i] = a[j]; a[j] = temp;
          i++; j--;
        }
      } while ( i <= j );
 
      // Сейчас указатель i указывает на начало правого подмассива,
      // j - на конец левого (см. иллюстрацию выше), lb ? j ? i ? ub.
      // Возможен случай, когда указатель i или j выходит за границу массива
 
      // Шаги 2, 3. Отправляем большую часть в стек  и двигаем lb,ub
 
      if ( i < ppos ) {     // правая часть больше
 
        if ( i < ub ) {     //  если в ней больше 1 элемента - нужно 
          stackpos++;       //  сортировать, запрос в стек
          lbstack[ stackpos ] = i;
          ubstack[ stackpos ] = ub;
        }
        ub = j;             //  следующая итерация разделения
                            //  будет работать с левой частью
 
      } else {              // левая часть больше
 
        if ( j > lb ) { 
          stackpos++;
          lbstack[ stackpos ] = lb;
          ubstack[ stackpos ] = j;
        }
        lb = i;
      }
 
    } while ( lb < ub );        // пока в меньшей части более 1 элемента
 
  } while ( stackpos != 0 );    // пока есть запросы в стеке
}
 
int main()
{
    
    for (int i = 0; i < 10; i++)
    {
        a[i] = rand()%100;  //заполняем массив случайными числами
    }
    qSortI(10); //сортируем
    
    for (int i = 0; i < 10; i++)
    {
        cout << a[i] << endl;  //выводим отсортированный массив
    }
   return 0;
}
Добавлено через 40 секунд
и почитай здесь
 
Текущее время: 13:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru