您的位置:首页 > 其它

冒泡排序(优化)

2016-09-14 09:24 246 查看
冒泡排序的效率不高,适合小量数据的排序,当数据较多的时候,建议使用其他排序算法,在另一篇博客中我已经介绍了冒泡排序冒泡排序,这篇博客将对冒泡排序进一步优化。

例如,有这样一个数组,int arr[]={13,10,7,9,3,23,43,52,61,71};可以看到这个数组有一个明显的特点:前五个数字无序,后五个数字有序,且都比前五个数字大,这样我们就可以最多进行5次排序就可以把整个数组的顺序确定下来。

我们同样可以设置标志位,找出需要交换的数字和不需要交换的数字的分界位置。这里就是5,下次只要从数组头部遍历到这个位置就可以了。后面的数字就不用遍历了。

Java代码实现如下:

package bubble;

public class bubble3 {
public static int [] bubble(int []arr)
{
int j,k,m;
m=1;
int temp=0;
int flag=arr.length;
while(flag>0)
{
k=flag;
flag=0;
for(j=1;j<k;j++)
{
if(arr[j-1]>arr[j])
{
temp=arr[j-1];
arr[j-1]=arr[j];
arr[j]=temp;
flag=j;
}
}
System.out.println("第"+(m++)+"次遍历:");
for(int i=0;i<arr.length;i++)
{
System.out.print(arr[i]+" ");
}
System.out.println();
}
return arr;
}
public static void main(String[] args)
{
//数组的前五个无序,后五个有序,且后五个比前五个都大。
int arr[]={13,10,7,9,3,23,43,52,61,71};
int arr1[]=bubble(arr);
for(int i=0;i<arr1.length;i++)
{
System.out.print(arr1[i]+" ");
}
}
}


结果为:

第1次遍历:

10 7 9 3 13 23 43 52 61 71

第2次遍历:

7 9 3 10 13 23 43 52 61 71

第3次遍历:

7 3 9 10 13 23 43 52 61 71

第4次遍历:

3 7 9 10 13 23 43 52 61 71

第5次遍历:

3 7 9 10 13 23 43 52 61 71

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