Меню сайта
Категории раздела
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); } | |
Просмотров: 8909 | Рейтинг: 4.8/6 |
Всего комментариев: 0 | |