数据结构中几种排序的java实现

1、选择排序

public static int[] selectSort(int[] arrys){
        int high=arrys.length;
        for(int i=0;i<high-1;i++){
            for(int j=i+1;j<high-1;j++){
                if(arrys[i]>arrys[j]){
                int temp=arrys[j];
                arrys[j]=arrys[i];
                arrys[i]=temp;
                }
            }       
        }
        return arrys;

}

2、冒泡排序

    public static int[] bubbleSort(int[] arrys){
        for(int i=0;i<arrys.length;i++){
            for(int j=0;j<arrys.length-i-1;j++){
                if(arrys[j]>arrys[j+1]){
                    int temp=arrys[j];
                    arrys[j]=arrys[j+1];
                    arrys[j+1]=temp;
                }
            }
        }
        return arrys;   
    }

3、插入排序

    public static int[] insertSort(int[] arrys){

        for(int i=1;i<arrys.length;i++){
            int currentElement=arrys[i];
            int j;
            for( j=i-1;j>=0&&arrys[j]>currentElement;j--){
                arrys[j+1]=arrys[j];
            }
            arrys[j+1]=currentElement;
        }
        return arrys;

    }

4、快速排序

    public static int[] quickSort(int a[],int low,int high){
            int i=low;    
            int j=high;    
            int key=a[low];
            if (low < high){    
                while(i<j){ // 此处的while循环结束,则完成了元素key的位置调整    
                    while(i<j&&key<=a[j]){    
                        j--;    
                    } 
                    int temp=a[i];
                    a[i]=a[j];
                    a[j]=temp; 
                   //a[i]=a[j];    
                    while(i<j&&key>=a[i]){    
                        i++;    
                    }    
                    a[j]=a[i];    
                    a[i]=key;  //此处不可遗漏  
                }     
                quickSort(a,low,i-1);    
                quickSort(a,i+1,high);    
            }    
        return a;

    }

5、希尔排序

    public static int [] shellSort(int[] arrys){
        //定下间隔,时间复杂度是O(N^2)
        for(int gap=arrys.length/2;gap>0;gap=gap/2){
            for(int i=gap;i<arrys.length;i++){
                int tem=arrys[i];
                //不仅比较一个间隔的的大小,还要考虑两个及其两个以上间隔数与tem的比较
                for(int j=i;j>=gap&&tem<arrys[j-gap];j=j-gap){
                    arrys[j]=arrys[j-gap];
                    arrys[j-gap]=tem;
                }
            }
        }
        return arrys;
    }

6、归并排序

    private static void inMergeSort(int[] arrys, int[] temp, int left, int right) {
        // TODO Auto-generated method stub
        int middle=(left+right)/2;
        if(left<right){
            inMergeSort(arrys, temp, left, middle);
            inMergeSort(arrys, temp, middle+1, right);
            merge(arrys,temp,left,middle,right);
            System.out.println(Arrays.toString(arrys));
        }
    }
    private static void merge(int[] arrys, int[] temp, int left, int middle, int right) {
        // TODO Auto-generated method stub
        int i=left;
        int j=middle+1;
        int k=0;
        while(i<=middle&&j<=right){
            if(arrys[i]<arrys[j]){
                temp[k++]=arrys[i++];
            }
            else{
                temp[k++]=arrys[j++];
            }
        }
        while (i<=middle){
            temp[k++]=arrys[i++];
        }
        while(j<=right){
            temp[k++]=arrys[j++];
        }
        for (int k2 = 0; k2<temp.length; k2++) {
            arrys[k2 ] = temp[k2];
        }
    }

再附上一张绝世好图

这里写图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值