Сравнить количество перестановок при сортировке массива методами Шелла и челночным - C (СИ)
Формулировка задачи:
Дан массив из 10000 элементов. Нужно провести сортировку шелла по убыванию, а так же челночную сортировку, а затем сравнить эти методы по числу сравнений и перестановок элементов, вывести эти значения и отсортированный массив в файл.
Пока имеется только вот это:
#include <stdio.h> #include <stdlib.h> #include <conio.h> #include <math.h> #include <time.h> void vvod_m(int n, int a[]) { int i; srand(time(0)); for(i=0;i<n;i++) { a[i]=rand()%n; } } void vyvod(int n, int a[]) { int i; FILE*h; h=fopen("out.txt", "w"); for(i=0;i<n;i++) { fprintf(h,"%d \n", a[i]); } fclose(h); } int ShellSort(int a[],int len) { long d=len,i,j; int c; do { d=d/2; i=0; while ((j=i+d)<len) { if (a[i]>a[j]) { c=a[i]; a[i]=a[j]; a[j]=c; }; i++; }; } while (d>1); return 0; } int main() { int a[10000], n ; do { printf ("Vvedite n \n"); scanf ("%d", &n); } while ((n<=0)||(n>10000)); vvod_m(n,a); ShellSort(a,10000); vyvod(n,a); return 0; }
Решение задачи: «Сравнить количество перестановок при сортировке массива методами Шелла и челночным»
textual
Листинг программы
#include <iostream> #include <fstream> #include <locale.h> using namespace std; void shsort(int *pn, int n, ofstream& f); void dsort(int* pn, int n, ofstream& f); void swap(int& n1, int& n2); using namespace std; int main() { setlocale(LC_ALL,"Russian"); const char* filename = "d:\\output.txt"; ofstream ofs(filename,ofstream::out); int n = 0; cout << "Введите количество элементов массива N = "; cin>>n; int i = 0, *A = new int[n]; while (i < n) A[i++] = i + 1; shsort(A,n,ofs); dsort(A,n,ofs); return 0; } void shsort(int *pn, int n, ofstream& fs) { fs<<"\nСортировка методом Шелла:\n"; fs<<"Исходная последовательность = "; for (int z1 = 0; z1 < n; z1++) fs<<pn[z1]<<" "; fs<<endl; int ncmps = 0, nswaps = 0; for (int gap = n-1; gap >= 0; gap--) for (int i = 0; (i + gap) < n; i++) { if (pn[i] < pn[i + gap]) { swap(pn[i],pn[i + gap]); nswaps++; } ncmps++; } fs<<"Результат сортировки = "; for (int z2 = 0; z2 < n; z2++) fs<<pn[z2]<<" "; fs<<endl; fs<<"Сравнений = "<<ncmps<<" "<<"Перестановок = "<<nswaps<<endl; } void dsort(int* pn, int n, ofstream& fs) { fs<<"\nСортировка методом Челнока:\n"; fs<<"Исходная последовательность = "; for (int z1 = 0; z1 < n; z1++) fs<<pn[z1]<<" "; fs<<endl; int ncmps = 0, nswaps = 0; for (int i = 0; i < n-1; i++) { if (pn[i] > pn[i+1]) { swap(pn[i],pn[i+1]); nswaps++; for (int k = i; (pn[k] < pn[k-1]) && (k >= 1); k--) { swap(pn[k],pn[k-1]); nswaps++; } } ncmps++; } fs<<"Результат сортировки = "; for (int z2 = 0; z2 < n; z2++) fs<<pn[z2]<<" "; fs<<endl; fs<<"Сравнений = "<<ncmps<<" "<<"Перестановок = "<<nswaps<<endl; } void swap(int& n1, int& n2) { int _t = n1; n1 = n2; n2 = _t; }
Объяснение кода листинга программы
Код выполняет сортировку массива двумя методами: методом Шелла и методом Челнока.
Метод Шелла (Shell sort) - это алгоритм сортировки, который использует принцип разделяй и властвуй
. Он сортирует массив путем последовательного уменьшения разности между соседними элементами, которые необходимо поменять местами.
Метод Челнока (Bubble sort) - это алгоритм сортировки, который сравнивает пары соседних элементов и меняет их местами, если они находятся в неправильном порядке. Этот процесс повторяется до тех пор, пока весь массив не будет отсортирован.
Ввод данных:
- Количество элементов массива N = Вывод данных:
- Исходная последовательность
- Сортировка методом Шелла
- Количество сравнений =
- Количество перестановок =
- Сортировка методом Челнока
- Количество сравнений =
- Количество перестановок = Переменные:
- n (количество элементов массива)
- A (массив для сортировки)
- filename (имя файла для вывода результатов)
- ofs (файловый поток для вывода результатов)
- ncmps (количество сравнений при сортировке методом Шелла)
- nswaps (количество перестановок при сортировке методом Шелла)
- fs (файловый поток для вывода результатов сортировки методом Шелла)
- nswaps (количество перестановок при сортировке методом Челнока)
- fs (файловый поток для вывода результатов сортировки методом Челнока)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д