在 c++ 中对数组和值进行排序
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]<<" ";
}
}
这个程序没有给我输出...我该怎么办?我已经尝试了所有方法,但它只是无法通过执行部分?我该怎么办?
-
你混淆了分配(
=
(和昏迷监狱(==
(。while(i = x)
会将x
分配给i
,然后计算i
,所以它等于while(x)
,如果x
为0,则永远不会运行,否则无穷无尽。 -
你的循环仍然是无穷无尽的。以(固定(循环
while (i == 3)
为例。i
在该循环中永远不会被修改,并且其中没有break
或return
,因此即使是固定版本也会无休止地运行。但这是您需要解决的设计问题。也许在所有这些if
之后应该有一个else { break; }
? -
你仍然会得到错误的结果,因为你交换了变量的值,
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
相关文章:
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 显示错误输出的简单数组排序程序
- 为什么我的排序算法会更改数组值
- 为什么我需要C++中不同的排序格式来对这个USACO代码上的数组和优先级队列进行排序
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 合并排序不排序自创建数组类 c++
- 带有枚举方向/类型的气泡排序结构数组
- 为什么指针在对二维数组进行排序时无法正常工作?
- 排序并行数组
- 如何在数组 c++ 中对字符串进行排序
- 为什么在此排序算法实现中,向量明显比数组慢?
- 如何对不在数组中的变量进行排序?
- C++数组与向量排序(在我的情况下,向量比数组慢~2.5倍(无优化))
- 按字母顺序对结构内数组变量中的名称进行排序
- 使用排序函数 c++ 对字符数组进行排序
- 使用 std::sort 对二维 c 数组进行排序
- 使用STL对用户输入数组进行排序的错误有什么解决方案吗?
- 使用 std::sort 对 C 样式的 2D 数组进行部分排序
- 数组为此合并排序函数提供了正确的输出,但向量给出了不正确的输出.出了什么问题?
- 对 0 、1 和 2 的数组进行排序