• 冒泡排序算法(Java)


    

    冒泡排序即每次遍历。相邻数字间进行比較,前者大于后者进行交换,不断将最大值后移,直至沉至最后位置;算法关键要点在于确定每次循环的边界。

    后面两种算法则是对冒泡排序一定程度上的改良,但相对于其它排序算法,冒泡排序性能依旧较差。

    //冒泡排序
    public class Bubble_Sort {
    
    	//最原始的解法
    	public void bubble_sort1(int[] data)
    	{
    		int n = data.length;
    		for(int i = 0; i < n; i++)
    		{
    			//注意循环的index范围,避免溢出
    			for(int j = 0; j < n - i - 1; j++)
    			{
    				if(data[j] > data[j + 1])
    				{
    					swap(data, j , j + 1);
    				}
    			}
    		}
    	}
    	
    	//改进算法。通过引入一个标志量flag,推断一次循环是否有移动。若无移动,则表示
    	//排序已经完毕,无需在进行下一次继续循环
    	public void bubble_sort2(int[] data)
    	{
    		int n = data.length;
    		boolean flag = true;//标示是否进行了移动
    		int index = n - 1; //标示须要循环的最后一位的index
            //一旦在移动。则继续循环		
    		while(flag)
    		{
    			flag = false;
    			for(int j = 0; j < index - 1; j++)
    			{
    				if(data[j] > data[j + 1])
    				{
    					swap(data, j , j + 1);
    					flag = true;
    				}
    			}
    			index--;
    		}
    	}
    	
    	//改进算法二:当一次遍历中。最后m位都未进行转换,则表示后面n位都比当前这个最大数要大
    	//依据冒泡排序知,每次沉入最大值,则后面这些位一定已经排好序
    	public void bubble_sort3(int[] data)
    	{
    		int n = data.length;
    		int index = n - 1;
    		
    		while(index != 0)
    		{
    			int k = 0;
    			for(int j = 0; j < index - 1; j++)
    			{
    				if(data[j] > data[j + 1])
    				{
    					swap(data, j , j + 1);
    					k = j;
    				}
    			}
    			index = k;
    		}
    	}
    	
    	//无法像C++一样使用引用实现,故仅仅好使用data数组进行改变
    	private void swap(int[] data , int a, int b)
    	{
    		int temp = data[a];
    		data[a] = data[b];
    		data[b] = temp;
    	}
    	
    	public void print_array(int[] data)
    	{
    		for(int num : data)
    		{
    			System.out.print(num);
    			System.out.print(" ");
    		}
    	}
    	
    	
    	public static void main(String[] args) {
    		
    		Bubble_Sort bubble_Sort = new Bubble_Sort();
    		int data[] = {2,34,45,2,13,24,5,24,57};
    		bubble_Sort.bubble_sort3(data);
    		bubble_Sort.print_array(data);
    
    	}
    
    }
    

    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    Ajax
    PS将图标变灰
    圆角
    前端性能优化最佳实践(转)
    jquery $(document).ready() 与window.onload的区别
    js阻止冒泡及jquery阻止事件冒泡示例介绍
    CSS选择器、CSS hack及CSS执行效率
    Github快速入门手册
    Windows 系统下Git安装图解
    史上最全github使用方法:github入门到精通
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4855827.html
Copyright © 2020-2023  润新知