交换排序——冒泡排序

来源:互联网 发布:清除localstorage数据 编辑:程序博客网 时间:2024/06/07 03:45

基本思想:

在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。

操作过程:

这个没什么好说的,大家都很清楚。

算法的实现:

public static void main(String[] args) {// TODO Auto-generated method stubint a[]={3,5,2,9,7,1,4};int n=a.length;for(int i=0;i<n;i++){for(int j=0;j<n-i-1;j++){if(a[j]>a[j+1]){int temp=a[j];a[j]=a[j+1];a[j+1]=temp;}}}for(int k=0;k<n;k++){System.out.println(a[k]);}}


算法的改进:

传统冒泡排序中每一趟排序操作只能找到一个最大值或最小值,我们考虑利用在每趟排序中进行正向和反向两遍冒泡的方法一次可以得到两个最终值(最大者和最小者) ,从而使排序趟数几乎减少了一半。

public void improveBubble(int a[],int length){int i=length-1;while(i>0){int pos=0;for(int j=0;j<i;j++){if(a[j]>a[j+1]){pos=j;int temp=a[j];a[j]=a[j+1];a[j+1]=temp;}i=pos;}}}

参考资料:http://blog.csdn.net/hguisu/article/details/7776068

这篇博客的第一种改进算冒泡算法有问题,其实实际上原始冒泡排序就是在已经排好序之前的数组排,根本就不用再设置标志位了。

0 0
原创粉丝点击