关于冒泡排序算法的几种实现
2014-01-21 23:09
197 查看
冒泡排序是一种很常见的排序方法,其基本思想为:对N个数排序,分N-1趟进行(当N-1个数的顺序确定后,最后一个也就确定了)。每一趟通过两两比较交换,确定一个数的适当位置。
根据其思想,不难有以下实现方法:
(1)第i趟将第i大的数放在相应位置:
(2)第i趟将第i小的数放在相应位置:
(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,后面的四个数全比前面的大,那么在排序时,就不用每次都要比较这些数了:
根据其思想,不难有以下实现方法:
(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
相关文章推荐
- 关于Android圆角ImageView的几种实现方式
- 关于gridview中用checkbox全选的几种实现的区别
- 关于Java WebService 的几种实现方式
- 关于不同页面之间实现参数传递的几种方式讨论
- 关于java实现的求素数的几种方法
- 关于Ajax中处理回传参数的几种实现
- 关于input提示文字的几种实现方式
- 关于python单例的常用几种实现方法
- 关于singleton模式的几种实现。
- Java基础之关于几种单例实现的思考
- 关于分布式Session 的几种实现方式
- 关于Android实现滑动返回的几种方法总结
- 关于tail在unix和windows下的几种实现
- (android实战)实现【关于我们】功能(textview的文本样式几种实现方式)
- 关于AngularJs数据递归呈现的实现的几种方式
- 几种关于ASM & AAM 模型代码实现的对比
- 关于实现宿舍共享校园网上网的几种方法~
- 关于gridview中用checkbox全选的几种实现的区别
- 关于圆角ImageView的几种实现方式
- android关于实现去掉标题栏的几种方法