Это код, который я написал для первоначального ввода случайных чисел и последующей их сортировки методом сортировки вставок.
#include<iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main(void)
{
int array[10];
srand (time(0));
for (int i = 0; i < sizeof(array)/sizeof(array[0]); i++ )// inputting values into array[10]
{
array[i] = 1 + (rand()%100); //any random number between 1 - 100
}
cout <<" Before sorting " << " ---" <<endl;
for (int i = 0; i < sizeof(array)/sizeof(array[0]); i++ )// printing the values
{
cout << array[i]<< endl;
}
int key ;
int t;//for future purpose
int compcount = 0;//to keep track of comparisons
for (int j = 1; j<sizeof(array)/sizeof(array[0]);j++)
{
key = array[j];//assign to second element initially
t = j-1;//assign to first element initially
while (j > 0 && array[t]>key)
{
array[t+1] = array[t];//moving array if bigger than next element
t = t-1;
compcount++;
}
array[t+1] = key;
}
cout << " After sorting" << " --- " <<endl;
for (int i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
{
cout << array[i]<< endl;
}
cout << "comparison count is " << compcount << endl;
system ("pause");
return 0;
}
Если честно, у меня есть проект, и он просит запустить алгоритмдля лучшего, худшего и случайного ввода и вычислите количество ключевых сравнений (которое я считаю «compcount» в этом коде)
Теперь случайный ввод будет иметь смысл для этого.Когда я сделал другой код с «уже отсортированным» массивом чисел (наилучший сценарий), число ключевых сравнений было равно 0. Может ли кто-то пролить свет на то, является ли худший сценарий полной противоположностью этому?Если бы это было так, я попытался сделать это, но я получил только 32 сравнения с размером массива 32.
Извините за длинный вопрос.В худшем случае вход должен иметь (n ^ 2-n) / 2 числа сравнений, верно?И в лучшем случае должно быть n-1, потому что только первый элемент прошел бы по всему списку и подтвердил бы его сортировку. Как я могу получить это в коде?