您的位置:首页 > 编程语言 > Python开发

关于冒泡排序算法的几种实现

2014-01-21 23:09 197 查看
冒泡排序是一种很常见的排序方法,其基本思想为:对N个数排序,分N-1趟进行(当N-1个数的顺序确定后,最后一个也就确定了)。每一趟通过两两比较交换,确定一个数的适当位置。

根据其思想,不难有以下实现方法:

(1)第i趟将第i大的数放在相应位置:

template<class T>
void bubbleSort(T* ptr,int size)
{
for(int i=0;i<size-1;i++)
for(int j=1;j<size-i;j++)
if(ptr[j-1] > ptr[j])
swap(ptr+j-1,ptr+j);
}


(2)第i趟将第i小的数放在相应位置:

template<class T>
void bubbleSort(T* ptr,int size)
{
for(int i=0;i<size-1;i++)
for(int j=i;j<size;j++)
if(ptr[i] > ptr[j])
swap(ptr+i,ptr+j);
}
但是这种方法有一个很大问题,就是如果输入的数据已经排好序了,那么就做了太多的无用功,于是想办法,当序列已经排好序时,算法就应停止。于是有下面实现

(3)当已排好序时,算法结束:

def bubbleSort(a) :
"bubble sort"
flag = True
f = 0 # f指示已牌号几个数
while flag:
flag = False
f += 1
for x in range(1,len(a)-f) :
if a[x-1] > a[x] :
a[x-1],a[x] = a[x],a[x-1]
flag = True
(这个我是用Python写的,不过很容易写成C++的)

(4)如果要排序的数据部分已经排好序,如23,24,12,34,45,56,67,后面的四个数全比前面的大,那么在排序时,就不用每次都要比较这些数了:
def bubbleSort_1(a) :
k = len(a)
flag = True
while flag :
flag = False
for x in range(1,k) :
if a[x-1] > a[x] :
a[x-1],a[x] = a[x],a[x-1]
flag = True
k = x
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 冒泡排序 算法