排序

 

1.选择排序,就是每次找到最小的元素,然后和第一位更换;然后第二次最小和第二个;。。。。。。。。

public static void main(String[] args) {
        int arr[] = {0,57,7,5,1};
        System.out.println(Arrays.toString(choose(arr)));
    }
    
    public static int [] choose(int [] arr){
         //选择排序的优化
        for(int i = 0; i < arr.length - 1; i++) {// 做第i趟排序
            int k = i;
            for(int j = k + 1; j < arr.length; j++){// 选最小的记录
                if(arr[j] < arr[k]){ 
                    k = j; //记下目前找到的最小值所在的位置
                }
            }
            //在内层循环结束,也就是找到本轮循环的最小的数以后,再进行交换
            if(i != k){  //交换a[i]和a[k]
                int temp = arr[i];
                arr[i] = arr[k];
                arr[k] = temp;
            }    
        }
        return arr;
    }

2.插入排序。 其实就是打扑克。 对于那种已经有序(部分有序),插入排序是效率表叫高的

public static void main(String[] args) {
        int arr[] = {0,57,7,5,1};
        System.out.println(Arrays.toString(insert(arr)));
    }
    public static int [] insert(int [] arr){
        int insertData,j;
        for(int i=1;i<arr.length;i++){//i 每个元素 ,从第二个元素开始
            insertData = arr[i];
            j=i-1;//这时候已经有序了,看看和之前相比,是否是小的
            while(j>=0&&insertData<arr[j]){//主要是这个排 大还是小于;arr[j]是前一个元素
                 arr[j + 1] = arr[j];// 如果要插入的元素小于第j个元素,就将第j个元素向后移动
                 j--;
            }
            arr[j+1]=insertData;//如果满足条件直接不动,放在最后
        }
        return arr;
    }

 3.希尔排序   增量排序    http://blog.csdn.net/pzhtpf/article/details/7559896

希尔排序是 嫌弃 插入排序只能一个数组相邻元素 移动太慢。 在插入排序的基础上做的处理

@Test
    public void shell(){
         int arr[]={1,54,6,3,78,34,12,45,56,100};  
         double N = arr.length;//这个是为了模拟增量
         int temp = 0;
         while(true){//外面一次大循环是执行一次  增量的处理     5 3 1
             N = Math.ceil(N/2);
             int increment =(int)N;//增量
             for(int i=0;i<arr.length;i=i+increment){
                 int j = i-increment;
                 temp = arr[i];
                 for(;j>=0&&temp<arr[j];j=j-increment){//这里是插入排序的思想
                     arr[j+increment] = arr[j];//交换数字
                 }
                 arr[j+increment] = temp;
             }
             if(increment==1){
                 break;
             }
         }
         System.out.println(Arrays.toString(arr));
    }

4. 归并排序  自定向下的排序

http://www.cnblogs.com/shudonghe/p/3302888.html

5.快速排序    找到分割点

http://www.cnblogs.com/coderising/p/5708801.html

6.冒泡排序

/**
     * 冒泡排序的 第一圈就是控制循环的走多少次
     */
    @Test
    public void bubble(){
        
        int arr[] ={3,5,9,1,3,4,5,8,1};
        for(int i=0;i<arr.length;i++){  
            for(int j=0;j<arr.length-1-i;j++){
                if(arr[j]>arr[j+1]){
                    int tmp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = tmp; 
                }
            }
        }
        
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+",");
        }
        
    }

7.堆排序

http://blog.csdn.net/kimylrong/article/details/17150475

posted on 2017-09-15 17:06  biyangqiang  阅读(148)  评论(0编辑  收藏  举报

导航