我正在嘗試創建一個排序演算法,它包含一個嵌套回圈,它將陣列的每個元素與陣列中的所有其他元素進行比較,如果一個元素的值大于它的任何后續元素,它們會與每個元素交換位置其他。但由于某種原因,我的程式不會輸出任何內容并以代碼 0 退出,即成功。
以下是我的代碼:
#include <iostream>
using namespace std;
void sortAlgo(int *a, int n){
int tmp;
for (int i=0; i<=n-1; i ){
for(int j=i 1; j<=n; j ){ //O(n^2)
if(a[i]>a[j]){
//LHS variable assumes RHS quantity
tmp=a[i]; //a[i] value stored in temp variable
a[i]=a[j]; //shifts a[j] value to a[i]
a[j]=tmp; //a[j] takes value of a[i]
}
}
}
for(int x=0; x<=n; x ){
cout<<a[x]<<" ";
}
}
int main(){
int arr[10]={1,2,3,5,23,12,4};
sortAlgo(arr, 7);
}
我正在使用 VS 代碼。
uj5u.com熱心網友回復:
這不是冒泡排序演算法您正在嘗試使用冗余交換實作選擇排序演算法。
這些 for 回圈
for(int j=i 1; j<=n; j ){ //O(n^2)
和
for(int x; x<=n; x ){
如果傳遞的陣列將具有確切的元素,則具有通常會導致未定義行為的無效條件,n因為運算式a[n]將訪問陣列之外??的記憶體。
此外,在第二個 for 回圈中,變數x未初始化,再次呼叫未定義的行為。
注意而不是“手動”交換兩個元素
tmp=a[i]; //a[i] value stored in temp variable
a[i]=a[j]; //shifts a[j] value to a[i]
a[j]=tmp; //a[j] takes value of a[i]
std::swap您可以使用標頭中宣告的標準 C 函式<utility>。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/523812.html
下一篇:C語言:array[]中的[variables ]何時作業?例如,當陣列[j ]=arr[i]。是先做j 還是先做=arr[i]?
