[英]Sorting arrays and values in c++
#include <iostream>
using namespace std;
int main() {
int a=70, b=40, c=5, d=1, e=-20, f=90, g=2, mid;
int array[7]={a, b, c, d, e, f, g};
for (int i = 0; i<=5; i++) {
while (i=0) {
if (a>b && a>c && a>d && a>e && a>f && a>g) {
mid=g;
g=a;
a=mid;
}
else if (b>a && b>c && b>d && b>e && b>f && b>g) {
mid=g;
g=b;
b=mid;
}
else if (c>a && c>b && c>d && c>e && c>f && c>g) {
mid=g;
g=c;
c=mid;
}
else if (d>a && d>c && d>b && d>e && d>f && d>g) {
mid=g;
g=d;
d=mid;
}
else if (e>a && e>c && e>d && e>b && e>f && e>g) {
mid=g;
g=e;
e=mid;
}
else if (f>a && f>c && f>d && f>e && f>b && f>g) {
mid=g;
g=f;
f=mid;
}
else if (g>a && g>c && g>d && g>e && g>f && g>b) {
mid=g;
g=g;
g=mid;
}
}
while (i=1) {
if (a>b && a>c && a>d && a>e && a>f) {
mid=f;
f=a;
a=mid;
}
else if (b>a && b>c && b>d && b>e && b>f) {
mid=f;
f=b;
b=mid;
}
else if (c>a && c>b && c>d && c>e && c>f) {
mid=f;
f=c;
c=mid;
}
else if (d>a && d>c && d>b && d>e && d>f) {
mid=f;
f=d;
d=mid;
}
else if (e>a && e>c && e>d && e>b && e>f) {
mid=f;
f=e;
e=mid;
}
else if (f>a && f>c && f>d && f>e && f>b) {
mid=f;
f=b;
b=mid;
}
}
while (i=2) {
if (a>b && a>c && a>d && a>e) {
mid=e;
e=a;
a=mid;
}
else if (b>a && b>c && b>d && b>e) {
mid=e;
e=b;
b=mid;
}
else if (c>a && c>b && c>d && c>e) {
mid=e;
e=c;
c=mid;
}
else if (d>a && d>c && d>b && d>e) {
mid=e;
e=d;
d=mid;
}
else if (e>a && e>c && e>d && e>b) {
mid=e;
e=e;
e=mid;
}
}
while (i=3) {
if (a>b && a>c && a>d) {
mid=d;
d=a;
a=mid;
}
else if (b>a && b>c && b>d) {
mid=d;
d=b;
b=mid;
}
else if (c>a && c>b && c>d) {
mid=d;
d=c;
c=mid;
}
else if (d>a && d>c && d>b) {
mid=d;
d=d;
d=mid;
}
}
while (i=4) {
if (a>b && a>c) {
mid=c;
c=a;
a=mid;
}
else if (b>a && b>c) {
mid=c;
c=b;
b=mid;
}
else if (c>a && c>b) {
mid=c;
c=c;
c=mid;
}
}
while (i=5) {
if (a>b) {
mid=b;
b=a;
a=mid;
}
else if (b>a) {
mid=b;
b=b;
b=mid;
}
}
}
for (int k=0; k<7; k++){
cout<<array[k]<<" ";
}
}
這個程序沒有給我輸出......我該怎么辦? 我已經嘗試了所有方法,但它只是無法進入執行部分? 我該怎么辦?
你混淆了賦值 ( =
) 和 comaprison ( ==
)。 while(i = x)
會將x
分配給i
,然后計算i
,因此它等於while(x)
,如果x
為 0 則永遠不會運行,否則為無窮大。
你的循環仍然是無止境的。 以(固定)循環while (i == 3)
為例。 i
永遠不會在該循環內進行修改,並且其中沒有break
或return
,因此即使是固定版本也會無休止地運行。 但這是您需要解決的設計問題。 也許應該有一個else { break; }
else { break; }
畢竟這些if
的?
您仍然會得到錯誤的結果,因為您交換了變量a
、 b
、 c
、 d
、 e
、 f
和g
,但從不修改array
。 但是最后,您打印了數組的值。 該數組不通過引用存儲項目,而是復制它們的值。 為什么還要使用這么多變量而不直接對數組進行操作?
每個while
的最后一個else if(..)
塊是無用的。 仔細看看 - 例如 - 這段代碼:
mid=d; d=d; d=mid;
它將d
的值分配給d
。 兩次。
正如評論中已經提到的,排序是在標准庫中實現的。 使用std::sort而不是編寫自己的排序函數:
std::sort(std::begin(array), std::end(array));
您可以使用 std 或 boost 庫進行排序。 或者你可以自己編碼。 請通過下面的代碼。
#include<iostream>
using namespace std;
void selectionSort(int a[], int n) {
int i, j, min, temp;
for (i = 0; i < n - 1; i++) {
min = i;
for (j = i + 1; j < n; j++)
if (a[j] < a[min])
min = j;
temp = a[i];
a[i] = a[min];
a[min] = temp;
}
}
int main() {
int a[] = { 22, 91, 35, 78, 10, 8, 75, 99, 1, 67 };
int n = sizeof(a)/ sizeof(a[0]);
int i;
cout<<"Given array is:"<<endl;
for (i = 0; i < n; i++)
cout<< a[i] <<" ";
cout<<endl;
selectionSort(a, n); // calling my function selection sort. This will sort as ascending order
for (i = 0; i < n; i++)
cout<< a[i] <<" "; // Printing sorted array
return 0;
}
以上代碼用於升序。
降序請參考: https : //www.includehelp.com/cpp-programs/sort-an-array-in-descending-order.aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.