冒泡排序原理 (升序)
将一组数据从小到大排序
将第一个数与他紧邻着的第二个数进行比较,如果比第二个数大,则互换,换完以后第二个数和第三个数进行比较,选择是否交换,小的在前 大的在后,直至最大的数放到末尾以后开始第二轮冒泡排序。
eg:9,8,7,6,5,4,3,2,1,0
排列成 0,1,2,3,4,5,6,7,8,9
原理:
第一轮冒泡排序 :
- 9 8 7 6 5 4 3 2 1 0
- 8 9 7 6 5 4 3 2 1 0
- 8 7 9 6 5 4 3 2 1 0
- 8 7 6 9 5 4 3 2 1 0
- 8 7 6 5 9 4 3 2 1 0
- 8 7 6 5 4 9 3 2 1 0
- 8 7 6 5 4 3 9 2 1 0
- 8 7 6 5 4 3 2 9 1 0
- 8 7 6 5 4 3 2 1 9 0
- 8 7 6 5 4 3 2 1 0 9
第二轮冒泡排序 :
- 8 7 6 5 4 3 2 1 0 9
- 7 8 6 5 4 3 2 1 0 9
- 7 6 8 5 4 3 2 1 0 9
- 7 6 5 8 4 3 2 1 0 9
- 7 6 5 4 8 3 2 1 0 9
- 7 6 5 4 3 8 2 1 0 9
- 7 6 5 4 3 2 8 1 0 9
- 7 6 5 4 3 2 1 8 0 9
- 7 6 5 4 3 2 1 0 8 9
第三轮冒泡排序 :
- 7 6 5 4 3 2 1 0 8 9
- 6 7 5 4 3 2 1 0 8 9
- 6 5 7 4 3 2 1 0 8 9
- 6 5 4 7 3 2 1 0 8 9
- 6 5 4 3 7 2 1 0 8 9
- 6 5 4 3 2 7 1 0 8 9
- 6 5 4 3 2 1 7 0 8 9
- 6 5 4 3 2 1 0 7 8 9
第四轮冒泡排序 :
- 6 5 4 3 2 1 0 7 8 9
- 5 6 4 3 2 1 0 7 8 9
- 5 4 6 3 2 1 0 7 8 9
- 5 4 3 6 2 1 0 7 8 9
- 5 4 3 2 6 1 0 7 8 9
- 5 4 3 2 1 6 0 7 8 9
- 5 4 3 2 1 0 6 7 8 9
第五轮冒泡排序
- 5 4 3 2 1 0 6 7 8 9
- 4 5 3 2 1 0 6 7 8 9
- 4 3 5 2 1 0 6 7 8 9
- 4 3 2 5 1 0 6 7 8 9
- 4 3 2 1 5 0 6 7 8 9
- 4 3 2 1 0 5 6 7 8 9
第六轮冒泡排序
- 4 3 2 1 0 5 6 7 8 9
- 3 4 2 1 0 5 6 7 8 9
- 3 2 4 1 0 5 6 7 8 9
- 3 2 1 4 0 5 6 7 8 9
- 3 2 1 0 4 5 6 7 8 9
第七轮冒泡排序
- 3 2 1 0 4 5 6 7 8 9
- 2 3 1 0 4 5 6 7 8 9
- 2 1 3 0 4 5 6 7 8 9
- 2 1 0 3 4 5 6 7 8 9
第八轮冒泡排序
- 2 1 0 3 4 5 6 7 8 9
- 1 2 0 3 4 5 6 7 8 9
- 1 0 2 3 4 5 6 7 8 9
第九轮冒泡排序
- 1 0 2 3 4 5 6 7 8 9
- 0 1 2 3 4 5 6 7 8 9
第十轮冒泡排序
- 0 1 2 3 4 5 6 7 8 9
代码展示
//冒泡排序
//参数是数组的形式
#include <stdio.h>
//传过来的是首元素的地址
//int arr[] 等价于 int* arr
void bubble_sort(int arr[],int sz)
{
//趟数
int i = 0;
for (i = 0; i < sz - 1; i++)
{
//一趟冒泡排序
int j = 0;
for (j = 0; j < sz - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
//交换,大的放后面
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
}
int main()
{
//数组
//把数组中的元素排成升序
int arr[] = { 9,8,7,6,5,4,3,2,1,0 };
// 0 1 2 3 4 5 6 7 8 9
int sz = sizeof(arr) / sizeof(arr[0]);
//冒泡排序
//arr传过来的是首元素的地址
bubble_sort(arr,sz);
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}