冒泡排序是稳定排序,最差、平均时间复杂度是O(n2);最好是O(n)
基本思想:
假如待排序表长为n,根据轻气泡不能在重气泡之下的原则,从后往前(或者从前往后)两两比较相邻元素的值,若A[i-1]>A[i] ,则交换它们,直到序列比较完,即完成一趟冒泡,结果将最小的元素交换到待排序列的第一个位置。下一趟冒泡时,前一趟确定的最小元素不再参加比较,每趟冒泡的结果把序列中的最小元素排到序列的最终位置,这样最多做n-1 趟冒泡就能把所有元素排好序。第一趟冒泡排序呢如下图所示:
#include<iostream>
#include<stdio.h>
//从前往后
void bubbleSort(int list[],int n)
{
int i,j,temp;
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
{
if(list[j]>list[j+1])
{
temp=list[j];
list[j]=list[j+1];
list[j+1]=temp;
}
}
}
//从后往前
void bubbleSort1(int list[],int n)
{
int i,j,temp;
for(i=0;i<n-1;i++)
for(j=n-1;j>i;j--)
{
if(list[j-1]>list[j])
{
temp=list[j];
list[j]=list[j-1];
list[j-1]=temp;
}
}
}
main()
{
int list[9]={9,1,5,8,3,7,4,6,2};
int n=9;
bubbleSort1(list,n);
for(int i=0;i<n;i++)
printf("\n %d",list[i]);
printf("\n");
system("PAUSE");
}
python代码如下:
'''
冒泡排序
'''
def bubble_sort(lst):
n = len(lst)
for i in range(n):
for j in range(1, n - i):
if lst[j - 1] > lst[j]:
lst[j - 1], lst[j] = lst[j], lst[j - 1]
return lst
lst = [5,3,8,4,2,1,9,6,7]
lst_sorted = bubble_sort(lst)
print(lst_sorted)