原本在公司里自己写了一个排序总汇,想想还是放在外面好,。。。无论是好是坏,我想后者更能让我在一些思维提高上有一些帮助。。。
排序是一个非常有意思的东西,从里面可以看到由简单到复杂,然后再由复杂到简单,最后无论在数量级,占用空间,效率,稳定方面都会对思想有很大的提升。
首先为了有测试数据,定制一个产生乱序数组的方法体:
private static int[] GenerateNumber(int len,int max){
int[] temp=new int[len];
Random r=new Random();
for(int i=0;i<len;i++){
temp[i]=r.nextInt(max);
}
return temp;
}
其max为产生整型数字的最大值,len为产生数组的长度。
以一个标准10位数组做分析:
SampleArray ===>> 62,73,4,50,51,9,86,96,41,18
level1.冒泡开始:
原理如同名字一样,把极值(最小或最大值)渐渐排挤出来。
第一轮:
从第一个62开始,62与73比较,73大,pass,,63再与4比较,大于4,和4交换位置,
以此类推。。。。起到到最后一个位置为96,
public static void bubbleSort(int a[]){
for(int i=0,len=a.length;i<len;i++){
for(int j=i;j<len ;j++){
if(a[i]>a[j])
swap(a, i, j);
}
}
}
private static void swap(int a[],int s,int e){
int t=a[s];
a[s]=a[e];
a[e]=t;
}
一共是N轮,每轮从第I个位置开始,直至交换到最后,(n-1)n/2,其时间复杂度n2次方,
程序在附件里面,柱子的高度代表值,点击调试可以一步一步的断点运行,可以观察这些数字交换变化。
又忘记了,不能上传附件,还是传到千脑去:http://www.qiannao.com/space/show/brucexx/上传分享/AlgorithmAnimation.java/.page