冒泡排序算法——C/C++
冒泡排序
1. 算法思想
冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
2. 排序步骤
2.1 默认认为原数据为无序的。
2.2 从第二个数据开始排序,进行数据比较,如果array[i]>array[i+1],就进行交换。
2.3 把这一轮比较结果,最小的置换到最前面(或者把最大的置换到最后面)。
2.4 置换后的为有序数组。
2.5 重复2-4步骤,直到数组有序为止。
3. 动图演示**
4. 完整代码
三个函数
交换函数:void swap(int array[],int x,int y)
排序函数:void BubbleSort(int array[],int size)
主函数:int main()
冒泡排序一种是小的向上浮,一种是大的向下沉。
#include <stdio.h>
void display(int array[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", array[i]);
}
printf("\n");
}
void swap(int array[], int x, int y) {
int key = array[y];
array[y] = array[x];
array[x] = key;
}
//重的往下沉
void BubbleSort(int array[], int size) {
//外循环为排序趟数,size 个数进行 size-1 趟
//内循环为每趟比较的次数,第 i 趟比较 size-1-i 次
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - 1 - i; j++) {
if (array[j] > array[j + 1]) {
swap(array, j, j + 1);
}
}
//打印每次排序
display(array, size);
}
}
// 轻的往上浮
void BubbleSort2(int array[], int size) {
for (int i = 0; i < size - 1; i++) {
for (int j = size - 1; j > i; j--) {
if (array[j] < array[j - 1]) {
swap(array, j, j - 1);
}
}
// 打印每次排序
display(array, size);
}
}
int main() {
int array[] = {
49, 38, 65, 97, 76, 13, 27, 49, 10};
int size = sizeof(array) / sizeof(int);
//打印原始数据
printf("%d \n", size);
display(array, size);
BubbleSort(array, size);
return 0;
}
5. 结果展示(显示每次排序结果)
5、算法分析
时间复杂度:
- 最好:O(n)
- 最坏:O(n^2)
- 平均:O(n^2)
空间复杂度:O(1)
稳定性:稳定
还没有评论,来说两句吧...