我看过一个有关对数组进行气泡排序的教程。
这是使用的代码:
int main()
{
int numbers[5];
int asc;
//input 5 integers
cout << "Enter 5 Numbers : \n";
for (int i = 0; i < 5; ++i) {
cin >> numbers[i];
}
for (int i = 0; i < 5; ++i) // outer loop
{
for (int a = i + 1; a < 5; ++a) // inner loop
{
if (numbers[i] > numbers[a])
{
asc = numbers[i];
numbers[i] = numbers[a]; // swapping
numbers[a] = asc;
}
}
}
cout << endl << "Ascending Order : ";
for (int i = 0; i < 5; ++i)
{
cout << numbers[i] << " ";
}
return 0;
}
我试图理解每一行,但是我陷入了外循环,内循环和交换部分,在那部分我有点困惑。
有帮助吗?预先感谢!
答案 0 :(得分:0)
让输入为5、1、4、2、8。
由于5> 1,(数字[i]>数字[i] +1)
在执行交换之前,您将需要一个变量来临时存储number [i]的值,在这种情况下,变量为asc。
当asc存储number [i]的值时,number [i + 1]的值将替换number [i]的原始值,而asc的值将替换number [i + 1]的值。这样,两个数字的值交换就完成了。
需要多次回合气泡排序才能对数组进行完全排序。下面的示例直观地展示了气泡排序算法的工作原理。
第一轮冒泡排序:
( 5 1 4 2 8)–>( 1 5 4 2 8),此处,算法比较前两个元素,并从5> 1开始交换。
(1 5 4 2 8)–>(1 4 5 2 8),从5> 4开始交换
(1 4 5 2 8)–>(1 4 2 5 8),从5> 2开始交换
(1 4 2 5 8)–>(1 4 2 5 8),现在,由于这些元素已经按顺序(8> 5),因此算法不会交换它们。
气泡排序第二轮:
(1 4 2 5 8)–>(1 4 2 5 8)
(1 4 2 5 8)–>(1 2 4 5 8),从4> 2开始交换
(1 2 4 5 8)–>(1 2 4 5 8)
(1 2 4 5 8)–>(1 2 4 5 8)