我有整个程序,但可以正常运行。 printArray函数仅打印Array的第一个元素,并且似乎不对元素进行排序。 我不知道如何处理。
int main(){
int number;
printf( "Give a number of elements:" );
scanf("%d",&number);
printf("Array to sort:");
int* Array = createArray(number);
int sizeArr = sizeof(Array)/sizeof(Array[0]);
int *sortedArr = insertionSort(Array,sizeArr);
puts("");
printf("Sorted array by Insertion Sort:");
printArr(sortedArr,sizeArr);
getch();
return 0;
}
int* createArray(int number){
int *arr =(int*) malloc(sizeof(int*)*number);
srand((unsigned)time(NULL));
for(int i=0;i<number;i++){
arr[i] = 1 + rand()%10;
printf("%d",arr[i]);
}
return arr;
}
int *insertionSort(int *arr,int sizeArr){
int i, j,repArr;
for(i=1;i<sizeArr;i++){
repArr = arr[i];
j=i-1;
while(j>=0 && arr[j]>repArr){
arr[j+1] = arr[j];
j = j - 1;
}
arr[j+1] = repArr;
}
return arr;
}
void printArr(int*arr,int sizeArr){
for(int i=0;i<sizeArr;i++){
printf("%d",arr[i]);
}
puts("");
}
答案 0 :(得分:1)
tl; dr:您有责任知道分配中有多少个元素。您分配了 1 number
个元素,因此大小为number
。
此行不执行您认为的操作。它将比较int
和int *
的大小。在您的平台上,它们的大小相同。
int sizeArr = sizeof(Array)/sizeof(int);
您正在告诉所有函数,您拥有一个由1个元素组成的数组,因此您对这1个元素进行了排序并打印了1个元素。
您已经知道存在int
个正在伪装的number
。
您可以使用{{1},而不是将malloc
的结果解释为一堆int
(那里没有int
,因此您的程序是未定义的)。 },其中有一个std::vector<int>
成员。
这是一种更C ++的方法
size
1:忽略#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;
}
和int
的混淆,它们在您的平台上大小相同。在其他平台上,您有多个int *
元素。