python这样简洁的语言,内置了很多排序、队列、集合等方法,使得算法什么的没那么重要。但是用python来实现以前学过的算法,也是乐趣,简洁的语法更加容易的理解算法.
python语法相关知识可以参考:
冒泡排序:
-
1.排序方法
- a[0..n]为无序区。 (2)第一趟扫描
- 从无序区底部向上依次比较相邻的两个气泡的重量,若发现轻者在下、重者在上,则交换二者的位置。即依次比较 (a[n],a[n-1]),(a[n-1],a[n-2]),…,(a [1 ],a[0]);对于每对气泡(a[j+1],a[j]),若a[j+1] < a[j],则交换a[j+1] < a[j]的内容。
- 第一趟扫描完毕时,”最轻”的气泡就飘浮到该区间的顶部,即关键字最小的记录被放在最高位置a[0]上。 (3)第二趟扫描
- 扫描a[1..n]。扫描完毕时,”次轻”的气泡飘浮到a[ 1]的位置上……
-
最后,经过n-1 趟扫描可得到有序区a[0..n]
注意: - 第i趟扫描时,a[0..i-1]和a[ i..n]分别为当前的有序区和无序区。扫描仍是从无序区底部向上直至该区顶部。扫描完毕时,该区中最轻气泡飘浮到顶部位置a[i]上,结果是a[0..i]变为新的有序区。
将被排序的数组a[n]垂直排列,每个记录看作是重量为a[i]的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组a。凡扫描到违反本原则的轻气泡,就使其向上”飘浮”。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。(1)初始状态
python 实现代码
# -*-coding:utf-8 -*-
'''
Created on 2016年3月2日
@author: wupengyue@126.com
'''
def BubbleSort(mylist):
'''列表冒泡排序'''
length=len(mylist)
for i in range(length):
exchange=False #交换标志
for j in range(length-1,i,-1):
if mylist[j]<mylist[j-1]:
temp=mylist[j]
mylist[j]=mylist[j-1]
mylist[j-1]=temp
exchange=True #发生了交换,故将交换标志置为真
if not exchange:
return
for x in mylist:
print x
if __name__=='__main__':
a=[12,3,4,56,78,90,56]
BubbleSort(a)
print a
C 实现代码
/*
Created on 2016年3月2日
@author: wupengyue@126.com
*/
#include <stdio.h>
typedef int bool;
#define false 0
#define true 1
void BubbleSort(int a[],int n);
int main()
{
int a[8]={49,38,65,97,76,13,27,49};
int i;
int n=sizeof(a)/sizeof(a[0]);
for (i=0;i<n;i++)
{
printf("%d \t",a[i]);
}
printf("\n");
BubbleSort(a,n);
for (i=0;i<n;i++)
{
printf("%d \t",a[i]);
}
printf("\n");
return 0;
}
void BubbleSort(int R[],int n)
{
int i,j;
int temp;
bool exchange=false;
for (i=0;i<n;i++)
{
for (j=n-1;j>i;j--)
{
if (R[j]<R[j-1])
{
temp=R[j];
R[j]=R[j-1];
R[j-1]=temp;
exchange=true;
}
}
if (!exchange)
return ;
}
return ;
}