[英]Bubble sort in c++ (asc)
我看过有关对数组进行冒泡排序的教程。
这是使用的代码:
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;
}
我试图理解每一行,但我被困在外循环、内循环和交换部分,我对那部分有点困惑。
有什么帮助吗? 提前致谢!
假设输入为 5、1、4、2、8。
由于 5 > 1, (number[i] > number[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 )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.