我正在尝试按升序对从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]<<" ";
}
答案 0 :(得分:2)
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;
}
}
}
}
答案 1 :(得分:1)
您只进行n
次互换。你需要一个外部循环进行排序(假设它是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;
}
}
答案 2 :(得分:0)
只有一个传递数据,这里有一个示例显示发生了什么
8 7 9 2 3 4 5
完成你的功能后,结果将是
7 8 2 3 4 5 9