Разработка программы для сравнительного анализа методов сортировки - C (СИ)
Формулировка задачи:
Помогите пожалуйста...!
Разработка программы для сравнительного анализа методов сортировки одномерных массивов: деления и сортировки квадратичным выбором.
вот метод деления
#include "stdafx.h"
#include "targetver.h"
#include <iostream>
#include <cstdlib>
#include <stdio.h>
#include <tchar.h>
#include <conio.h>
#include <time.h>
#define n 10
int main()
{
setlocale(LC_ALL, "Russian");
int i = 0, a = 0, b = 0, k = 0;
int nums[n];
srand(time(NULL));
for (i = 0; i < n; i++)
{
nums[i] = 0 + rand() % 11;
printf("%2d ", nums[i]);
}
printf("\n");
// сортировка
int countswap = 0; //счетчик обменов
int countcompare = 0; //счетчик сравнений
for (i = 0; i < n; ++i)
{
int temp = nums[i]; //текущая позиция
int left = 0; //левый край
int right = i; //правый край
while (left<right) //пока левый край меньше правого
{
int middle = (left + right) / 2; //находим середину МЕТОДОМ РАДЕЛЕНИЯ
if (temp >= nums[middle]) //если элемент больше середины
{
left = middle + 1; //левый край правее середины
}
else
right = middle; //иначе правый край равен середине
countcompare++;
}
int j;
for (j = i; j > left; --j)
{
int k;
k = nums[j - 1];
nums[j - 1] = nums[j]; //обмен
nums[j] = k;
countswap++;
}
}
printf("\n");
printf("Количество сравнений: %d\n", countcompare);
printf("Количество обменов: %d\n", countswap);
//------------------------------------
printf("Отсортированный: \n");
for (i = 0; i < n; i++)
printf("%2d ", nums[i]);
getch();
}Решение задачи: «Разработка программы для сравнительного анализа методов сортировки»
textual
Листинг программы
#include "stdafx.h"
#include "targetver.h"
#include <iostream>
#include <cstdlib>
#include <stdio.h>
#include <tchar.h>
#include <conio.h>
#include <time.h>
int main()
{
setlocale(LC_ALL, "Russian");
int i = 0, a = 0, b = 0, k = 0, n;
printf("Enter n\n");
scanf("%d", &n);
int nums[100];
srand(time(NULL));
for (i = 0; i < n; i++)
{
nums[i] = 0 + rand() % 11;
printf("%2d ", nums[i]);
}
printf("\n");
// сортировка
int cs1 = 0; //счетчик обменов
int t1=time(NULL);
for (i = 0; i < n; ++i)
{
int temp = nums[i]; //текущая позиция
int left = 0; //левый край
int right = i; //правый край
while (left<right) //пока левый край меньше правого
{
int middle = (left + right) / 2; //находим середину МЕТОДОМ РАДЕЛЕНИЯ
if (temp >= nums[middle]) //если элемент больше середины
{
left = middle + 1; //левый край правее середины
}
else
right = middle; //иначе правый край равен середине
}
int j;
for (j = i; j > left; --j)
{
int k;
k = nums[j - 1];
nums[j - 1] = nums[j]; //обмен
nums[j] = k;
cs1++;
}
}
t1=time(NULL)-t1;
printf("\n");
printf("Отсортированный: \n");
for (i = 0; i < n; i++)
printf("%2d ", nums[i]);
int n=5;
int a[100];
int r, cs2=0;
for (int i = 0; i < n; i++) {
nums[i] = 0 + rand() % 11;
printf("%2d ", nums[i]);
}
int t2=time(NULL);
for (int i = 0; i < n; i++) {
int m = i;
for (int j = i + 1; j < n; j++) {
if (a[j] < a[m])
m = j;
}
r=a[i];
a[i]=a[m];
a[m]=r;
cs2++;
// swap(a[i], a[m]);
}
t2=time(NULL)-t2;
for (int i = 0; i < n; i++) {
printf("%d ",a[i]);
}
printf("time is %d %d\n", t1, t2);
printf("swap is %d %d\n", cs1, cs2);
getch();
}
Объяснение кода листинга программы
Код представлен на языке C. Он реализует алгоритм сортировки пузырьком и сортировку слиянием. Список действий:
- Ввод количества элементов для сортировки (n).
- Генерация случайных чисел для массива nums[].
- Сортировка массива nums[] методом сортировки пузырьком.
- Вывод отсортированного массива nums[].
- Вычисление времени выполнения сортировки пузырьком.
- Сортировка массива nums[] методом сортировки слиянием.
- Вывод отсортированного массива nums[].
- Вычисление времени выполнения сортировки слиянием.
- Вывод времени выполнения и количества обменов для каждого метода.
- Ввод количества элементов для сортировки (n).
- Генерация случайных чисел для массива a[].
- Сортировка массива a[] методом сортировки пузырьком.
- Вывод отсортированного массива a[].
- Вычисление времени выполнения сортировки пузырьком.
- Сортировка массива a[] методом сортировки слиянием.
- Вывод отсортированного массива a[].
- Вычисление времени выполнения сортировки слиянием.
- Вывод времени выполнения и количества обменов для каждого метода.
- Ввод количества элементов для сортировки (n).
- Генерация случайных чисел для массива nums[].
- Сортировка массива nums[] методом сортировки вставками.
- Вывод отсортированного массива nums[].
- Вычисление времени выполнения сортировки вставками.
- Вывод времени выполнения и количества обменов для каждого метода.