所谓冒泡排序法,就是对一组数字进行从大到小或者从小到大排序的一种算法。具体方法是,相邻数值两两交换。从第一个数值开始,若是相邻两个数的排列顺序与咱们的指望不一样,则将两个数的位置进行交换(对调);若是其与咱们的指望一致,则不用交换。重复这样的过程,一直到最后没有数值须要交换,则排序完成。通常地,若是有N个数须要排序,则须要进行(N-1)趟起泡。git
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
假若有
9个数的一组数
:
6
,
8
,
1
,
2
,
4
,
3
,
5
,
9
,
7
从第一个数起
,依次和相邻两个数比较
,前大后小则换位
第一轮
:比较
9
-
1次
6和
8进行比较
,
6
<
8
,则不换位
,获得
6
,
8
,
1
,
2
,
4
,
3
,
5
,
9
,
7
8和
1进行比较
,
8
>
1
,则换位
,获得
6
,
1
,
8
,
2
,
4
,
3
,
5
,
9
,
7
8和
2进行比较
,
8
>
2
,则换位
,获得
6
,
1
,
2
,
8
,
4
,
3
,
5
,
9
,
7
8和
4进行比较
,
8
>
4
,则换位
,获得
6
,
1
,
2
,
4
,
8
,
3
,
5
,
9
,
7
8和
3进行比较
,
8
>
3
,则换位
,获得
6
,
1
,
2
,
4
,
3
,
8
,
5
,
9
,
7
8和
5进行比较
,
8
>
5
,则换位
,获得
6
,
1
,
2
,
4
,
3
,
5
,
8
,
9
,
7
8和
9进行比较
,
8
<
9
,则不换位
,获得
6
,
1
,
2
,
4
,
3
,
5
,
8
,
9
,
7
9和
7进行比较
,
9
>
7
,则换位
,获得
6
,
1
,
2
,
4
,
3
,
5
,
8
,
7
,
9
第二轮
:比较
9
-
1
-
1次
6和
1进行比较
,
6
>
1
,则换位
,获得
1
,
6
,
2
,
4
,
3
,
5
,
8
,
7
,
9
6和
2进行比较
,
6
>
2
,则换位
,获得
1
,
2
,
6
,
4
,
3
,
5
,
8
,
7
,
9
6和
4进行比较
,
6
>
4
,则换位
,获得
1
,
2
,
4
,
6
,
3
,
5
,
8
,
7
,
9
6和
3进行比较
,
6
>
3
,则换位
,获得
1
,
2
,
4
,
3
,
6
,
5
,
8
,
7
,
9
6和
5进行比较
,
6
>
5
,则换位
,获得
1
,
2
,
4
,
3
,
5
,
6
,
8
,
7
,
9
6和
8进行比较
,
6
<
8
,则不换位
,获得
1
,
2
,
4
,
3
,
5
,
6
,
8
,
7
,
9
8和
7进行比较
,
8
>
7
,则换位
,获得
1
,
2
,
4
,
3
,
5
,
6
,
7
,
8
,
9
第三轮
:
.
.
.后面我就不写
,一共比较
9
-
1轮
.也就是有多少个元素
,则比较多少个元素个数
-
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
|
#include <stdio.h>
//冒泡排序法
void
bubbleSort
(
int
arr
[
]
,
int
len
)
{
for
(
int
i
=
0
;
i
<
len
-
1
;
i
++
)
{
for
(
int
j
=
0
;
j
<
len
-
1
-
i
;
j
++
)
{
//相邻两个元素进行比较,若是前面元素比后面元素大则交换位置
if
(
arr
[
j
]
>
arr
[
j
+
1
]
)
{
arr
[
j
]
=
arr
[
j
]
^
arr
[
j
+
1
]
;
arr
[
j
+
1
]
=
arr
[
j
]
^
arr
[
j
+
1
]
;
arr
[
j
]
=
arr
[
j
]
^
arr
[
j
+
1
]
;
}
}
}
//打印排序后的数组
for
(
int
i
=
0
;
i
<
len
;
i
++
)
{
printf
(
"%d "
,
arr
[
i
]
)
;
}
}
int
main
(
int
argc
,
const
char
*
argv
[
]
)
{
//定义一个元素个数为10的数组,并赋值
int
num
[
9
]
=
{
6
,
8
,
1
,
2
,
4
,
3
,
5
,
9
,
7
}
;
//调用函数,传入数组和元素个数
bubbleSort
(
num
,
9
)
;
printf
(
"\n"
)
;
return
0
;
}
|