冒泡排序:时间复杂度为O(N^2),空间复杂度为O(1)
冒泡排序作为最简单的一种排序,非常适合初学者开始学习排序算法,今天就来讲一讲冒泡排序。
冒泡排序的思想:在一趟筛查中,逐步将每次需要排序的数挪到最后,一共n-1次筛查,最终就会形成一个有序的数组。
如图,展示一个数组第一堂筛查排序:
可以看到,在一趟中,我们将最大数8排到了数组的末尾,并且下趟8将不再参与排序。
同样,第二趟,将次大数7排到数组倒数第二个位置,并不再参与排序......
最终将会得到: 1 2 3 4 5 7 8
上代码:
void BubbleSort_incline(int* arr, int n)
{
//i<n-1,因为排到最后,剩下的一个数就是最小的,所以只需排n-1次
for (int i = 0; i < n - 1; i++)
{
int flag = 1; //定义一个flag来判断是否有序
//j<n-1-i,因为一趟排序,已经将最大的数排到了末尾,下一趟末尾的最大的数将不再参与排序
for (int j = 0; j < n - 1 - i; j++)
{
//如果前一个数比后一个数大,就互换两者的位置,直到将需要排序的部分中最大的数挪到最后
if (arr[j] > arr[j + 1])
{
Swap(&arr[j], &arr[j + 1]);
flag = 0;
}
}
//如果flag仍然等于1,说明第一趟排序没有执行if条件
//即说明原数组就是有序的,直接结束循环
if (flag == 1)
{
break;
}
}
}
结果显示:
对于冒泡排序我就不多说了,多练就好!