概述
冒泡排序算法的核心是每次冒泡过程中,比较相邻的两个元素,如果array[i-1]大于array[i],则将其交换,然后array[i]和array[i+1]再进行比较,将大的元素往后放。这样一趟下来,最大元素就被逐次“冒”到序列的末尾了。
C语言代码
下面是C语言版本的冒泡排序函数:
void BubbleSort(int array[], int len)
{
int i;
while (len > 0)
{
for(i = 1; i < len; i++) //从array[1]开始比较,循环len-1-i次
{
if (array[i-1] > array[i]) //如果前一个大于后一个,则交换
swap(&array[i - 1], &array[i]);
}
len--;
}
}
while循环中,会循环len次,每执行循环一次len都会减1,因为已经得出了一个结果所以不用再比较。在每一次while循环中,都会执行len-1-i次for循环,每执行一次for循环都会比较array[i-1]和array[i]的大小,如果array[i-1]大于array[i],则交换。在第一趟while循环中,当i=len-1时,array[i-1]是倒数第二个元素,array[i]是最后一个元素。
时间复杂度
如果序列的长度为n,第一趟的冒泡需要的比较次数是n-1;第二趟冒泡比较时由于最后一个元素已经得出,不需要比较,所以第二趟冒泡的总比较次数是n-2,以此类推。第i次冒泡的比较次数是n-i。所以得出冒泡排序的时间复杂度是O(n^2)。
Python代码
另外博主写了Pyhton版本的冒泡排序算法。
#FileName:BubbleSort.py
#Python Version:2.7.11
def BubbleSort(array,lenth):
while lenth > 0:
for i in range(1,lenth,1):
if array[i-1] > array[i]:
array[i],array[i-1] = array[i-1],array[i] #swap
#print array
lenth = lenth - 1
return array
输出结果如下:
>>> sortTest = [9,8,7,6,5,4,3,2,1]
>>> BubbleSort(sortTest,9)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>
C语言代码(完整版)
//BubbleSort.cpp : 定义控制台应用程序的入口点。
//IDE Version : VS2013
#include "stdafx.h"
void swap(int *a, int *b);
void BubbleSort(int array[], int len);
int _tmain(int argc, _TCHAR* argv[])
{
int sortTest[9] = { 9, 8, 7, 6, 5, 4, 3, 2, 1 };
BubbleSort(sortTest, 9);
for (int i = 0; i < 9; i++)
{
printf("%d ", sortTest[i]); //输出1 2 3 4 5 6 7 8 9
}
printf("\n ");
return 0;
}
//数据交换函数
void swap(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
//冒泡排序函数
void BubbleSort(int array[], int len)
{
int i;
do
{
for (i = 1; i < len; i++) //从array[1]开始比较,循环len-1-i次
{
if (array[i-1] > array[i]) //如果前一个大于后一个,则交换
swap(&array[i - 1], &array[i]);
}
}while(len--); //把while改成do...while
}