Меню сайта
Категории раздела
| HTML [44] |
| Visual C++ и MFC [21] |
| c++ [78] |
| php [19] |
| Javascript [15] |
| C# [51] |
| загрузки [0] |
|
XNA [10]
создание игр с помощью xna
|
Наш опрос
Друзья сайта
Статистика
Онлайн всего: 1
Гостей: 1
Пользователей: 0
Реклама
| Главная » Статьи » c++ |
Быстрая сортировка
Реализация алгоритма:// Быстрая сортировка
#include <iostream.h>
#include <iomanip.h>
#include <stdlib.h>
#include <time.h>
template <typename T>
void QSort(T array[] /* Сортируемый массив */,
int first /* Начальный индекс */, int last /* Конечный индекс */)
{
if(first < last)
{
// Переменная для просмотра массива слева
int i;
// Переменная для просмотра массива справа
int j;
// Временная переменная для обмена значений элементов
T temp;
// Элемент - точка разбиения массива
T point;
// Принимаем за точку разбиения первый элемент массива
// (можно выбрать любой)
point = array[first];
i = first;
j = last;
while(i < j)
{
// Ищем слева элемент, который >= точки разбиения
while(array[i] <= point && i < last)
i++;
// Ищем справа элемент, который <= точки разбиения
while(array[j] >= point && j > first)
j--;
if(i < j)
{
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
// Помещаем точку разбиения в правильную позицию,
// т. е. все элементы слева не больше нее, а
// все элементы справа не меньше нее
/* Примечание !!! */
// Использовать переменную point нельзя, так как она всего
// лишь копия элемента массива, являющегося точкой разбиения
/*****************/
temp = array[first];
array[first] = array[j];
array[j] = temp;
// Сортируем левый и правый подмассивы
QSort(array, first, j - 1);
QSort(array, j + 1, last);
}
}
// Функция для вывода массива
template <typename T>
void PrintArray(T array[], int size)
{
// функция setw(n) создает поле для вывода с шириной n символов
for(int i = 0; i < size; i++)
{
if(i % 5 == 0)
cout << endl;
cout << setw(15) << array[i];
}
cout << endl;
}
// Тестирование
void main()
{
// Инициализация генератора случайных чисел
srand(time(0));
// Размер массивов
const N = 10;
int i;
int a[N];
float b[N];
// Инициализация массивов случайными числами в диапазоне от -10 до 10
for(i = 0; i < N; i++)
{
a[i] = rand() % 21 - 10;
b[i] = rand() / (float)32767 * 20 - 10;
}
// Вывод массивов
cout << "Array A:\n";
PrintArray(a, N);
cout << "Array B:\n";
PrintArray(b, N);
// Сортировка массивов
QSort(a, 0, N - 1);
QSort(b, 0, N - 1);
// Вывод отсортированных массивов
cout << endl;
cout << "Array A:\n";
PrintArray(a, N);
cout << "Array B:\n";
PrintArray(b, N);
}
| |
| Просмотров: 8943 | Рейтинг: 4.8/6 |
| Всего комментариев: 0 | |