您的位置:首页 > 其它

算法总结(1)冒泡排序

2016-04-02 12:21 190 查看
     冒泡排序应该是排序算法中最简单易懂的一种排序算法了。

   一.思路

     将数据设想成竖立的,小的往上浮,大的往下沉。

     正确的应该是小的在顶上,大的在底下。

     从最底下的元素开始扫描,若发现两个相邻元素顺序错误,则交换。首先,比较a[n-1]和a[n-2],接着,a[n-2]和a[n-3],则在第一次循环完毕后,当前最小的元素被浮到了最顶上;同理,第二次又从最下面开始比较,不过,最后的比较是a[2]和a[1],因为之前最小的元素已经被浮到了a[0]处。

     注意:最后一次比较,只比较a[n-1]和a[n-2],若顺序错误,则交换,结束。

   二.伪代码

     bubblesort(a[])

            for i=0 to a.length-2                                                          //第i次循环,从o开始,已经有i个元素排好,第0次循环0个已排好

                  for j=a.length-1  downto i+1                                      //当前直到第i-1个元素都已经排好(已经有i个元素排好了),最多比较到i+1上的元素为止,即比较a[i+1]和a[i],比较每次                                                                                                        
 //都从最底下开始,即从a[n-1]和a[n-2]的比较开始, 如果顺序错误,就交换j和j-1位置的值

    三.java实现

/**
* @author garypotter
* @version 创建时间:2016年4月2日 下午12:48:50
* @TODO
* 类说明:冒泡算法
*/
public class BubbleSort {

public static void main(String[] args) {
Object[] a={5,2,3,8,1};
bubblesort(a);
System.out.println("result:"+a[0]+a[1]+a[2]+a[3]+a[4]);
}

public static void bubblesort(Object[] a){
for(int i=0;i<a.length-1;i++){ //从0到a。length-2,一共a。length-1次循环
for(int j=a.length-1;j>i;j--){ //从底部一直比较到最上面的没排好的那个元素
//j>i是这么来的,最后一次比较中的较小的元素下标j-1,必须大于已经排好序的最后一个元素的下标,
//在第i次循环中,有i-1个已经排好序的元素,已经排好序的最后一个元素下标为i-1,所以有j-1>i-1,得到j>i
if(((Comparable)a[j]).compareTo(a[j-1])<0){

swap(a,j,j-1);
}
}
}

}

public static void swap(Object[] a,int m,int n){
Object temp=a[m];
a[m]=a
;
a
=temp;
}

}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: