我有一個由 16 個數字組成的陣列,需要按降序排序,我嘗試以這種方式對它們進行排序,但似乎無法使其正常作業。
注意:我必須撰寫一個演算法,所以我不能使用任何特殊函式:(
#include <stdio.h>
#include <stdlib.h>
int main() {
int i, temp1, temp2;
int string2[16] = { 0, 4, 2, 5, 1, 5, 6, 2, 6, 89, 21, 32, 31, 5, 32, 12 };
_Bool check = 1;
while (check) {
temp1 = string2[i];
temp2 = string2[i 1];
if (temp1 < temp2) {
string2[i 1] = temp1;
string2[i] = temp2;
i = 0;
} else {
i ;
if (i = 15) {
check = !check;
}
}
}
return 0;
}
我意識到這對你們大多數人來說是非常基本的東西,但任何見解都非常感謝!
uj5u.com熱心網友回復:
有幾個問題:
_Bool在 C 中使用是一件奇怪的事情(也許這個問題是針對 C 的?)- 你沒有初始化
i。這稱為未定義行為。這可能會也可能不會起作用,這取決于計算機,但是在您的程式中使用類似的東西從來都不是一件好事。 (i=15)是一個任務。使用i==15的比較,因為==是比較操作為“等于”。
審核代碼:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
int main()
{
int i = 0,temp1,temp2; //i should be initialized
int string2[16] = {0,4,2,5,1,5,6,2,6,89,21,32,31,5,32,12};
bool check=1;
while(check)
{
temp1=string2[i];
temp2=string2[i 1];
if(temp1<temp2)
{
string2[i 1]=temp1;
string2[i]=temp2;
i=0;
}
else
{
i ;
if(i==15) { check=!check; } // = -> ==
}
}
//if this is intended for C, you can ignore this bit, or use printf
for (int i = 0; i < 16; i ) { std::cout << string2[i] << " ";}
}
輸出: 89 32 32 31 21 12 6 6 5 5 5 4 2 2 1 0
還有一些美學筆記:
- 如果您使用縮進(制表符和/或空格),請保持一致。其他人可能很難理解您的代碼,盡管程式何時編譯并不重要(對于任何質疑的人,這是在他重新縮進代碼之前)。
string2是int陣列的不規則名稱。同樣,它可能會引起混亂。閱讀:https : //1c-dn.com/library/rules_of_naming_variables/
uj5u.com熱心網友回復:
您還可以使用std::sort與std::greater<int>()引數:
std::sort(std::begin(string2), std::end(string2), std::greater<int>());
不發明一種自行車,除非你需要學習的東西,或者你知道如何優化你的情況的方式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/359771.html
