Java中的七大排序(上)

一般排序通常认为是升序。
稳定性:两个相等的数据若在排序前后的相对位置不发生改变,则称该算法是具备稳定性的算法。
一:插入排序
原理: 将数组分为有序区间和无序区间,每次用无需区间的
第一个数与有序区间进行比较。
时间复杂度:O(n*n),空间复杂度:O(1)
稳定性:稳定
代码如下:

站在用户的角度思考问题,与客户深入沟通,找到电白网站设计与电白网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都做网站、成都网站设计、企业官网、英文网站、手机端网站、网站推广、国际域名空间、网站空间、企业邮箱。业务覆盖电白地区。

public static void insertSort0(int[] array) {
        for (int i = 1; i < array.length; i++) {
            // 有序区间  [0, i)
            // 无序区间  [i, array.length)
            int key = array[i];
            int j;
            for (j = i - 1; j >= 0 && array[j] > key; j--) {
                array[j + 1] = array[j];
            }
            array[j + 1] = key;
        }
    }

二:希尔排序
原理:分组插排,每分隔gap个大小从数组中取一个数,进而将数组分成了若干 个组,重复此操作,直到gap=1;
时间复杂度:O(n)~O(n*n),空间复杂度:O(1)
稳定性:不稳定
代码如下:

public static void shellSort(int[] array){
    int gap=array.length;
    while(true){
        gap=(gap/3)+1;//or gap=gap/2
        insertSortWithGap(array,gap);
        if(gap==1){
            break;
        }
    }
}
private static void inserSortWithGap(int[] array,int gap){
    for(int i=gap;i=0&&array[j]>key;j-=gap){
            array[j+gap]=array[j];
        }
        array[j+gap]=key;
    }
}

三:选择排序
1.单向选择排序
原理:每次从无序区间选出最大(或者最小)的数存放在无序区间的最后(最 前),直到所有的待排序数据排序完。
时间复杂度:O(n^2),空间复杂度:O(1)
稳定性:不稳定

public static void selsctSort1(int[] array){
    //每次选最小的放在无序区间的前面
    for(int i=0;iarray[max]){
                max=j;
            }
        }
        int t=array[max];
        array[max]=array[array.length-i-1];
        array[array.length-i-1]=t;
    }
2.双向排序比较
     原理:每一次从无序区间选出最小 + 最大的元素,存放在无序区间的最前和最后,直到全部待排序的数据元素排完 。
     时间复杂度:O(n^2),空间复杂度:O(1)
     稳定性:不稳定

代码如下:

public static void selectSort3(int[] array){
    int low=0;
    int high=array.length-1;
    //[low,high]表示整个无序区间
    while(low<=high){
        int min=low;
        int high=low;
        for(int i=low+1;i<=max;i++){
        if (array[i] < array[min]) {
             min = i; 
        }
        if (array[i] > array[max]) {
             max = i; 
        }
        swap(array, min, low);
        if (max == low) {
             max = min; 
        }
        swap(array, max, high);
        }
        private void swap(int[] array, int i, int j) {
             int t = array[i]; array[i] = array[j]; array[j] = t;       
        }  
}

本文题目:Java中的七大排序(上)
网站链接:http://pwwzsj.com/article/jdeoje.html