我尝试按升序对由1到10的随机数组成的数组进行排序。我想出了这个函数:
void Sort(int a[10], int n)
{
int j = 0;
for (int i = 0; i < n-1; i++)
{
j = i+1;
if (a[i] > a[j])
{
int aux = a[i];
a[i] = a[j];
a[j] = aux;
}
}
}但是当我尝试输出数组时,函数似乎不起作用:
Sort(array, 10);
cout<<endl;
for (int i = 0; i < 10; i++)
{
cout<<array[i]<<" ";
}发布于 2011-04-08 23:48:05
Sort函数中的算法是错误的。它根本不会排序。
无论如何,不要重复发明轮子,最好使用std::sort:
#include <algorithm>
std::sort(array, array+10);至于您的Sort函数,您希望使用冒泡排序算法来实现该函数,可能是出于学习目的。正确的实现是这样的:
void Sort(int *a, int n)
{
for (int i = 0; i < n ; i++)
{
for (int j = i + 1; j < n ; j++)
{
if (a[i] > a[j])
{
int aux = a[i];
a[i] = a[j];
a[j] = aux;
}
}
}
}发布于 2011-04-08 23:47:33
您只是在进行n交换。您需要在sort上使用一个外部循环(假设它是bubble sort),以便继续执行该操作,直到停止执行交换为止。
bool Sort(int a[10], int n)
{
bool swapped = false;
int j = 0;
for (int i = 0; i < n-1; i++)
{
j = i+1;
if (a[i] > a[j])
{
int aux = a[i];
a[i] = a[j];
a[j] = aux;
swapped = true;
}
}
return swapped;
}
int main(int argc, char** argv) {
int a[10] = {5,4,3,1,2,6,7,8,9,10};
while (Sort(a,10));
for (int i=0;i<10;++i) {
std::cout << a[i] << std::endl;
}
}发布于 2011-04-08 23:51:42
这只会传递一次数据,下面是一个示例,向您展示发生了什么
8 7 9 2 3 4 5在遍历函数之后,结果将是
7 8 2 3 4 5 9https://stackoverflow.com/questions/5597532
复制相似问题