冒泡排序
冒泡排序
冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。
算法实现过程
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 > 人类语言:😜从第一个开始依次比较相邻的两个元素 如果后面的数字小于前面的 交换两数的位置,在使用交换后的数据比较,直到最后一个。每次把最大的数字放到后面。 ### 图片演示
每次确定一位最大的数字。每次循环次数比上一次少一位 >
如果一个数组长度是5 长度记为 len > 则比较轮数就是
数组长度减一 记作 i < len -1 >
每次的轮数记为 j < len-i-1 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34//冒泡排序
int main()
{
int array[5]; //声明数组
int len = sizeof(array)/sizeof(array[0]);//计算数组的长度
int cnt;//定义交换变量
int i,j;//定义循环变量
for( i =0 ; i<len;i++){ //数组初始化
int a = rand() % 100 ;//随机数 0~100
array[i] = a;
}
for ( i = 0; i < len; i++)
{
printf("%d ",array[i]); // 输出原始数据
}
printf("\n");
for ( i = 0; i < len-1; i++){ //外侧i 控制比较轮数 数组长度-1
for (j = 0; j < len-1-i; j++){ //每次的比较次数
if (array[j] > array[j+1]){ //相邻的两个数比较大小
cnt = array[j];
array[j] = array[j+1]; // 交换两个为主的数据
array[j+1] = cnt;
/* code */
}
}
}
for (int i = 0; i < len; i++)
{
printf("%d ",array[i]);
}
return 0;
}