tl; dr: Вы обязаны знать, сколько элементов в распределении. Вы выделили 1 number
элементов, поэтому размер равен number
.
Эта строка не делает то, что вы думаете, что она делает. Он будет сравнивать размеры int
и int *
. На вашей платформе они одинакового размера.
int sizeArr = sizeof(Array)/sizeof(int);
Вы сообщаете всем своим функциям, что у вас есть массив из 1 элемента, поэтому вы сортируете этот 1 элемент и печатаете этот 1 элемент.
Вы уже знаете, сколько существует int
(вы притворяетесь), это number
.
Вместо того, чтобы интерпретировать результат malloc
как набор int
с (там нет int
с, поэтому ваша программа не определена), вы можете использовать std::vector<int>
, который имеет size
член.
Вот более подход C ++
#include <iostream>
#include <random>
#include <vector>
#include <algorithm>
std::random_device rd; //Will be used to obtain a seed for the random number engine
std::mt19937 gen(rd()); //Standard mersenne_twister_engine seeded with rd()
std::vector<int> createNumbers(int number){
std::vector<int> arr(number);
std::uniform_int_distribution<> d10(1, 10);
std::generate_n(begin(arr), number, [&](){ return d10(gen); });
return arr;
}
template<class FwdIt, class Compare = std::less<>>
void insertionSort(FwdIt first, FwdIt last, Compare cmp = Compare{})
{
for (auto it = first; it != last; ++it) {
auto const insertion = std::upper_bound(first, it, *it, cmp);
std::rotate(insertion, it, std::next(it));
}
}
template<typename T>
std::ostream& operator<<(std::ostream& os, const std::vector<T>& vec)
{
for (auto& el : vec)
{
os << el << ' ';
}
return os;
}
int main(){
int number;
std::cout << "Give a number of elements:";
std::cin >> number;
auto Numbers = createNumbers(number);
std::cout << "Array to sort:" << Numbers;
insertionSort(begin(Numbers), end(Numbers));
std::cout << "Sorted array by Insertion Sort:" << Numbers;
return 0;
}
Вживую
1: игнорирование путаницы с int
и int *
, которые имеют одинаковый размер на вашей платформе. На других платформах у вас есть несколько элементов number
.