zoukankan      html  css  js  c++  java
  • 算法之简单排序

    代码示例:

    /**
     * 冒泡排序:
     *     复杂度:
     *     比较次数:n*(n-1)/2=O(n的平方)
     *     移动次数:平均移动(n的平方/4),所以复杂度也为n*(n-1)/2=O(n的平方)
     */
    public void BubbleSort(){
        int[] a= {3,65,4,9,5,0,6};
        int temp;
        for(int i=0;i<a.length;i++){
            for(int j=0;j<a.length-i-1;j++){
                if(a[j]>a[j+1]){//从小到大排序
                    temp=a[j+1];
                    a[j+1]=a[j];
                    a[j]=temp;
                }
            }
        }
        for(int i=0;i<a.length;i++){
            for(int j=0;j<a.length-i-1;j++){
                if(a[j]<a[j+1]){//从大到小排序
                    temp=a[j+1];
                    a[j+1]=a[j];
                    a[j]=temp;
                }
            }
        }
        //打印
        for(int i=0;i<a.length;i++){
            System.out.println(a[i]);
        }
    }
    
    /**
     * 选择排序:
     * 复杂度:
     * 比较次数:n*(n-1)/2,所以为O(n的平方)
     * 移动次数:平均移动N/2,所以为O(N)
     */
    public void selectSort(){
        int[] a= {3,65,4,9,5,0,6};
        int min_value;
        int min_index=0;
        int temp;
        for(int i=0;i<a.length;i++){
            min_value=a[i];
            min_index=i;
            for(int j=i+1;j<a.length;j++){
                if(a[j]<min_value){
                    min_value=a[j];
                    min_index=j;
                }
            }
            temp=a[i];
            a[i]=a[min_index];
            a[min_index]=temp;
        }
        //打印
        for(int i=0;i<a.length;i++){
            System.out.println(a[i]);
        }
    }
    
    /**
     * 插入排序:
     * 复杂度:
     * 最大比较次数:n*(n-1)/2,平均比较次数:n*(n-1)/4,,所以为O(n的平方),比冒泡排序和选择排序少一半的比较时间
     * 复制的次数大致等于比较的次数,然而一次复制的时间与一次交换的时间耗费不同。
     * 对于随机数据,这个算法比冒泡排序快一倍,比选择排序略快。
     */
    public void insertSort(){
        int[] a= {3,65,4,9,5,0,6};
        int temp_i;
        for(int i=1;i<a.length;i++){
            for(int j=0;j<i;j++){
                if(a[i]<a[j]){// 从小到大
                    temp_i=a[i];//a[i]为将要插入的值
                    for(int r=i;r>j;r--){
                        a[r]=a[r-1];//在j到i的区间上,依次向后移动
                    }
                    a[j]=temp_i;//插入a[i]的值
                    break;
                }
            }
        }
        //打印
        for(int i=0;i<a.length;i++){
            System.out.println(a[i]);
        }
    }
  • 相关阅读:
    stc单品机的命名规则
    代码导入单片机运行
    openlayers tips
    LeetCode 766. Toeplitz Matrix
    【题集】二叉树的遍历各类题型汇总
    LeetCode 821. Shortest Distance to a Character
    关于C++中vector<vector<int> >的使用
    POJ
    LeetCode#155 Min Stack
    LeetCode#160 Intersection of Two Linked Lists
  • 原文地址:https://www.cnblogs.com/BonnieWss/p/10756689.html
Copyright © 2011-2022 走看看