美文网首页
java排序算法

java排序算法

作者: Richard_80ec | 来源:发表于2017-11-29 22:29 被阅读0次

1 直接插入排序

假设一列数中的前n-1个数都是排好序的,然后把第n个数插入其中,
直到所有的数都排好序。
public class InsertSort{
    public static void insersort(){
        int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,
                34,15,35,25,53,51};
        int temp=0;
        //从第二个数开始遍历
        for(int i=1;i<a.length;i++){
            //首先记录a[i]的值
            temp = a[i];
            //尝试将第2个数及后面的数一个个插入到前面的有序数中
            //当前面只有一个数时,肯定是有序的,那么从第一个数开始,
            //每一次遍历都会把前面的数有序化
            int j = i-1;
            for(;j>=0&&a[j]>temp;j--){
                a[j+1] = a[j];
            }
            a[j+1] = temp;
        }
        for(int j=0;j<a.length;j++){
            System.out.print(a[j]+",");
        }
    }
}

2 希尔排序

也叫递减增量排序,是非稳定的排序算法,取一个正整数d1,
每相隔d1就取一个数合并为一组,然后对组内进行插入排序
public class ShellSort{
    public static void shelllsort(){
        int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,
                34,15,35,25,53,51};
        //获取数列长度
        double d1 = a.length;
        //将数列二分
        while(true){
            d1 = Math.ceil(d1/2);
            int d = (int)d1;
            //对0到d内的所有数以间隔d进行排序
            for(int i=0;i<d;i++){
                //对相隔为d的数进行插入排序
                for(int j=i+d;j<a.length;j+=d){
                    int p = j-d;
                    int temp = a[j];
                    for(;p>=0&&a[p]>temp;p-=d){
                        a[p+d] = a[p];
                    }
                    a[p+d] = temp;
                }
            }
            if(d == 1){
                break;
            }
        }
        for(int i =0;i<a.length;i++){
            System.out.print(a[i]+",");
        }
    }
}

3 简单选择排序

在要排序的一组数中,选出最小的一个数与第一个数替换,然后选择剩下最小的一个数与第二个数替换,直到所有数都排好序
public class SelectSort{
    public static void selectSort(){
        int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,
                34,15,35,25,53,51};
        for(int i=0;i<a.length;i++){
            int temp = a[i];
            int j = i+1;
            int position = i;
            for(;j<a.length;j++){
                if(a[j]<temp){
                    temp = a[j];
                    position = j;
                }
            }
            a[position] = a[i];
            a[i] = temp;
        }

        for(int p=0;p<a.length;p++){
            System.out.print(a[p] + ",");
        }
    }
}

相关文章

网友评论

      本文标题:java排序算法

      本文链接:https://www.haomeiwen.com/subject/ddopbxtx.html