码迷,mamicode.com
首页 > 编程语言 > 详细

内部 排序

时间:2016-03-02 11:09:18      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:

1冒泡排序

传统冒泡排序
  

 public static void bubble(int[] arr){
        int temp;
        for(int i=arr.length-1;i>0;i--){
            for(int j=0;j<i;j++){
                if(arr[j]>arr[j+1]){
                    temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
            }
        }
    }

 




时间复杂度O(n^2),只需一个额外空间O(1),稳定

传统冒泡排序有一个缺点,不管数据是否已经排序完成都会固定执行n(n-1)/2次,
我们可以在程序中加入判断来判断何时可以提前中断程序,提高效率

public static void bubble(int[] arr){
        int temp;
        
        for(int i=arr.length-1;i>0;i--){
            int flag=0;  //flag用来判断是否有执行交换的动作
            for(int j=0;j<i;j++){
                if(arr[j]>arr[j+1]){
                    temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                    flag++;          //如果有交换,flag不为0
                }    
                
            }
            if(flag==0){
                break;
            }    //当一次扫描判断后flag==0,没有交换动作,说明以完成排序,所以直接跳出循环
        }
    }

 




2选择排序法
时间复杂度O(n^2),只需一个额外空间O(1),不稳定
  

 public static void select(int[] arr){
        int tmp;
     for(int i=0;i<arr.length-1;i++){
        
         for(int j=i+1;j<arr.length;j++)
         {
             if(arr[j]<arr[i]){
                 tmp=arr[j];
                  arr[j]= arr[i];
                  arr[i]=tmp;
             }
         }
        
     }
    
    }

 


    
3插入排序
时间复杂度O(n),只需一个额外空间O(1),稳定,会造成数据的大量搬移,建议在链表上使用
 

public static void insert(int[] arr){
        int i,j;
        for(i=1;i<arr.length;i++)
        {    
            int tmp=arr[i];
            for(j=i-1;j>=0&&tmp<arr[j];j--){
                arr[j+1]=arr[j];
            }
            arr[j+1]=tmp;
        }
    }
    

   
4希尔排序

 

内部 排序

标签:

原文地址:http://www.cnblogs.com/xurui1995/p/5233856.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!