zoukankan      html  css  js  c++  java
  • 排序

    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

  • 相关阅读:
    rhel 6.4 + udev+ 11.2.0.3 + gi + asm+ rac 双节点安装
    rhel 6.4 + udev + 11.2.0.3 + asm 单点安装
    vmware 中linux虚拟机动态添加硬盘
    flashback drop
    flashback query
    11g crsctl start/stop crs 和 crsctl start/stop cluster 的关系
    10g crs 启动报错的记录
    检测数据库日志的切换频率及归档文件大小的sql
    用widthStep的方法来增加某范围的像素----与imageROI对比
    用imageROI来增加某范围的像素
  • 原文地址:https://www.cnblogs.com/bee-home/p/7527356.html
Copyright © 2011-2022 走看看