Исходник сравнения сортировки методом простых вставок с сортировкой методом турнир с выбыванием
Код на C++ #include <stdlib.h> #include <stdio.h> #include <time.h> #include <conio.h> int count=0,sr=0;//количество копирований и сравнений clock_t start,end; int t[4000]; int shell[4]={8,4,2,1}; int x[101]; //сортировка вставками void insert (int n) { int i, j, t; for (i=1; i<n; i++) { t=x[i];count++; for (j=i-1; j>=0 && t<x[j]; j--,sr++)//двигаемся снизу вверх {//пока t не больше или равно x[j] count++; x[j+1]=x[j];//сдвиг на одну позицию } x[j+1]=t;count++; } } void sort(int n) { for(int i=0;i<n-1;i++) { int k=i; for(int j=i+1;j<n;j++,count++) if(t[k]>t[j]) k=j; if (k!=i) { int r=t[k]; t[k]=t[i]; t[i]=r; sr++; } } } void sort2 (void) { for(int i=0;i<4;i++) { int x1=shell[i]; for(int j=0;j<x1;j++) { int k=0,l=j; while (l<102) { t[k]=x[j+k*x1]; l+=shell[i]; k++; } sort (k); for(l=0;l<k;l++) x[j+l*x1]=t[l]; } } } void main(void) { int a[101]; int i; clrscr(); randomize(); //случайный выбор первого числа for (i=0; i<=100; i++) a[i]=x[i]=random(200); //случайное число 0-199 printf("Сортировка методом простых вставок\n"); start=clock(); insert (100); end=clock(); //вызов подпрограммы сортировки for (i=0; i<100; i++) printf("%3d ",x[i]); printf("\nЧисло сортируемых элементов: 100"); printf("\nЧисло сравнений: %i",sr);sr=0; printf("\nЧисло копирований: %i",count);count=0; printf("\nВремя сортировки: %f сек",(end-start)/CLK_TCK); for(i=0;i<=100;i++) x[i]=a[i-1]; printf("\n\nТурнир с выбыванием\n"); start=clock(); sort2 (); end=clock(); for(i=1; i<=100; i++) printf("%3d ",x[i]); printf("\nЧисло сортируемых элементов: 100"); printf("\nЧисло сравнений: %i",sr); printf("\nЧисло копирований: %i",count); printf("\nВремя сортировки: %f сек",(end-start)/CLK_TCK); getch(); }
|