我是 C 新手,我一直在做氣泡排序,但是當我想在終端中顯示數字時,前導數字是個問題。對不起,我的英語不好順便說一句。
我在哪里做錯了?
這是代碼:
#include <iostream>
void printArray(int *myArr, int lenght) {
for (int i = 0; i < lenght; i) {
std::cout << myArr[i] << ", ";
}
}
int bubbleSort(int *myArr, int lenght) {
for (int i = 0; i < lenght; i) {
for (int j = 0; j < lenght-1; j) {
if (myArr[j] > myArr[j 1]) {
int temp = myArr[j];
myArr[j] = myArr[j 1];
myArr[j 1] = temp;
}
}
}
return *myArr;
}
int main() {
int myArr[] = {10,14,13,19,15,12,16,18,17,11};
int newArr = bubbleSort(myArr, 8);
printArray(&newArr, 8);
return 0;
}
這就是我得到的:
10, 10, 12, 13, 14, 15, 16, 18, 沒有 19 和雙 10
有沒有更簡單的方法來獲得函式中的陣列長度?謝謝...
uj5u.com熱心網友回復:
問題是您將指標與具有單個整數的陣列混淆了。
int bubbleSort(int *myArr, int lenght) {
// ... not actually that important what happens here ...
return *myArr;
}
你bubbleSort得到一個指向傳遞的陣列的第一個元素的指標,你做一些排序,最終你回傳那個排序陣列的第一個元素(回傳型別是int!)。這是錯誤的,或者也許沒有錯但沒有多大意義,但真正的戲劇只會在以后出現……
...在這里的時候
int newArr = bubbleSort(myArr, 8);
printArray(&newArr, 8);
您將回傳的單個整數復制bubbleSort到newArr(an int) 中,然后獲取其地址(仍然“正常”),然后printArray就像它指向一個它不指向的陣列一樣(現在它變成了 BooooM!)。
myArr[i]in 在printArray時是未定義的行為i > 0,因為myArr指向單個整數。它不指向陣列。
TL;DR:不要使用 c 陣列。c-arrays 是高級 C ,它們很容易出錯,很難正確。用于std::vector動態大小的陣列和std::array編譯時大小的陣列。
uj5u.com熱心網友回復:
這是您的程式的更正版本:
#include <iostream>
void printArray(int* myArr, int size) {
for (int i = 0; i < size; i) {
std::cout << myArr[i] << ", ";
}
}
void bubbleSort(int* myArr, int size) {
for (int i = 0; i < size; i) {
for (int j = 0; j < size-1; j) {
if (myArr[j] > myArr[j 1]) {
int temp = myArr[j];
myArr[j] = myArr[j 1];
myArr[j 1] = temp;
}
}
}
}
int main() {
int myArr[] = {10,14,13,19,15,12,16,18,17,11};
bubbleSort(myArr,10);
printArray(myArr,10);
return 0;
}
還可以找到矢量版本:
#include <iostream>
#include <vector>
void printArray(std::vector<int> & vec) {
for (int i = 0; i < vec.size(); i) {
std::cout << vec[i] << ", ";
}
}
void bubbleSort(std::vector<int> & vec) {
for (int i = 0; i < vec.size(); i) {
for (int j = 0; j < vec.size()-1; j) {
if (vec[j] > vec[j 1]) {
std::swap(vec[j],vec[j 1]);
}
}
}
}
int main() {
std::vector<int> vec = {10,14,13,19,15,12,16,18,17,11};
bubbleSort(vec);
printArray(vec);
return 0;
}
希望這對某人有用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/531174.html
標籤:C 数组排序印刷
上一篇:遞回洗掉元素(React)
下一篇:按最小和的順序,numpy陣列
