冒泡排序(Bubble Sort):
冒泡排序是一种简单的排序算法:它会重复地遍历要排序的列表,比较每对相邻的元素,并按照大小顺序交换它们。一般而言,这个过程会重复多次,每一轮都会将最大(或最小)的数移动到列表的末尾。由于这个过程像气泡一样逐渐将最大(或最小)的元素“浮”到列表的顶部,因此被称为“ 冒泡排序 ”。
具体的冒泡排序算法如下(以从小到大的顺序为例说明):
(1) 比较列表中相邻的两个元素,如果第一个元素的值比第二个元素的值大,则交换它们二者在数组中的位置;
(2)对每个相邻的元素均执行步骤(1),从列表的第一对元素到最后一对元素;
经过上述一轮的初步排序之后,最大的元素会“浮到”列表顶部,即最大的元素会移动到列表末尾处;
(3)针对每个元素重复(1)、(2)的步骤,并且每次的比较次数依次“ 减1 ”;
需要注意的是:最后一个已经排好序的元素不需要再次移动;
(4)重复上述三个步骤,直至所有的元素排序完成。
以下以数组内的元素排序为例,进行代码(c++)的详细说明:
示例:有一数组arr[10] = {2,1,5,4,56,33,25,46,89,67}, 请将该数组进行升序排列
//冒泡排序
int main()
{
int arr[10] = { 2,1,5,4,56,33,25,46,89,67 };
//打印并输出排序前的数组
cout << "排序前数组:" << endl;
for (int m = 0; m < 10; m++)
{
cout << arr[m] << " ";
}
cout << endl;
//开始冒泡排序
//外层循环:总共需要排序的总轮数
for (int i = 0; i < 10 - 1; i++)
{
//内层循环:每轮间相邻元素的对比
for (int j = 0; j < 10 - 1; j++)
{
//比较相邻元素得大小,符合条件则进行元素位置的互换
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
//打印并输出排序后的数组
cout << "排序后数组:" << endl;
for (int n = 0; n < 10; n++)
{
cout << arr[n] << " ";
}
cout << endl;
system("pause");
return 0;
}
在上述代码中,需要注意的是———外层循环和内层循环中for语句执行的条件
即“ 排序总轮数 ”和“ 每轮内比较次数 ”的计算:
(1)排序总轮数 = 数组内总元素个数 - 1
(2)每轮比较次数 = 数组内总元素个数 - 当前的排序轮数 - 1;
(当前排序轮数从0开始计算)
输出结果
以上即为本人对冒泡排序的一些学习心得,若存在错误,欢迎指正。