冒泡排序
冒泡排序动画
实现算法 (形式1)
//省略前面代码...
{
int []num ={488, 848, 559, 15, 5, 11441}
for (int i = 0; i < num.Length - 1; i++)
{
for (int j = 0; j < num.Length - 1 - i; j++)
{
if (num[j] > num[j + 1])
{
int tem;
tem = num[j + 1];
num[j + 1] = num[j];
num[j] = tem;
}
}
}
}
- 排序num数组需要num.Length-1轮,因为最后剩下的一个数(排序后num的第一个数)不用比较就是最小的,所以减去1
- 若在比较过程中前一个数比后一个大,则交换位置,保证在一轮比较后,最大的数在所有比较数组成队列中的最后。
变式
//省略前面代码...
{
int []num ={488, 848, 559, 15, 5, 11441}
for (int i = 0; i < num.Length - 1; i++)
{
for (int j = num.Length - 1- i; j >0 ; j--)
{
if (num[j-1] > num[j])
{
int tem;
tem = num[j - 1];
num[j - 1] = num[j];
num[j] = tem;
}
}
}
}
-
变式和形式1的区别1:每轮比较开始的位置不同,形式1每轮从剩下未排序数中的首个开始,而变式则是从未排序数中的末尾开始
-
变式和形式1的区别2: num排序是从后向前(形式1),num排序是从前向后(变式),可以通过减少2轮排序验证
-
形式1
//省略前面代码... { int []num ={488, 848, 559, 15, 5, 11441} for (int i = 0; i < num.Length - 3; i++) { for (int j = 0; j < num.Length - 1 - i; j++) { if (num[j] > num[j + 1]) { int tem; tem = num[j + 1]; num[j + 1] = num[j]; num[j] = tem; } } } }
-
变式
//省略前面代码... { int []num ={488, 848, 559, 15, 5, 11441} for (int i = 0; i < num.Length - 3; i++) { for (int j = num.Length - 1- i; j >0 ; j--) { if (num[j-1] > num[j]) { int tem; tem = num[j - 1]; num[j - 1] = num[j]; num[j] = tem; } } } }
-