所謂冒泡排序法,就是對一組數字進行從大到小或者從小到大排序的一種算法。具體方法是,相鄰數值兩兩交換。從第一個數值開始,若是相鄰兩個數的排列順序與咱們的指望不一樣,則將兩個數的位置進行交換(對調);若是其與咱們的指望一致,則不用交換。重複這樣的過程,一直到最後沒有數值須要交換,則排序完成。通常地,若是有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
;
}
|