算法之简单排序

代码示例:

/**
 * 冒泡排序:
 *     复杂度:
 *     比较次数: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]);
    }
}
原文地址:https://www.cnblogs.com/BonnieWss/p/10756689.html