七种基本排序算法

import java.util.LinkedList;

/**
 * 七种基本排序算法
 * */
public class BaseSort {

    public static void main(String[] args) {
        int[] m={3,7,6,5,2,1,4,8,9};
        //bubbleSort(m);
        //chooseSort(m);
        //insertSort(m);
        //shellSort(m);
        //heapSort(m);
        //mergeSort(m,0,m.length-1,new int[m.length]);
        quickSort(m,0,m.length-1);
        for (int s:m) {
            System.out.print(s+",");
        }
    }

    private static int[] bubbleSort(int[] m){
        //冒泡
        for(int i=0;i<m.length;i++){
            for(int j=i+1;j<m.length;j++){
                if(m[j]<m[i]){
                    int k= m[j];
                    m[j]= m[i];
                    m[i]= k;
                }
            }
        }
        return m;
    }

    private static int[] chooseSort(int[] m){
        //简单选择
        for(int i=0;i<m.length;i++){
            int min=m[i];
            int index=i;
            for(int j=i+1;j<m.length;j++){
                if(m[j]<min){
                    min=m[j];
                    index = j;
                }
            }
            m[index] = m[i];
            m[i] = min;
        }
        return m;
    }

    private static int[] insertSort(int[] m){
        //插入排序
        for(int i=1;i<m.length;i++){
           for(int j=0;j<i;j++){
               if(m[i]<m[j]){
                   int k= m[i];
                   for(int s=i;s>j;s--){
                       m[s] = m[s-1];
                   }
                   m[j] = k;
                   break;
               }
           }
        }
        return m;
    }

    private static int[] shellSort(int[] m){
        //希尔排序
        int increment =  m.length;
        while (true){
            increment=(increment/3)+1;
            for(int i=0;i<increment;i++){
                for(int j=i+increment;j<m.length;j+=increment){
                    int k= j;
                    //插入排序
                    while((k-increment)>=0&&(m[k]<m[k-increment])){
                        int s= m[k];
                        m[k] = m[k -increment];
                        m[k-increment] = s;
                        k-=increment;
                    }
                }
            }

            if(increment==1){
                break;
            }
        }
        return m;
    }

    private static int[] heapSort(int[] m) {
     //堆排序 https://www.cnblogs.com/jingmoxukong/p/4303826.html
     //构造初始堆
        for(int i= m.length/2;i>=0;i--){
           //最多m.length/2个父节点
            heapAdjust(m,i,m.length);
        }
     //替换首尾元素,并重新调整堆
        for(int i=m.length-1;i>0;i--){
            int a= m[i];
            m[i] = m[0];
            m[0] = a;
            heapAdjust(m,0,i);
        }
        return m;
    }

    private static void heapAdjust(int[] m, int i, int length) {
        //堆调整
        int tmp = m[i];
        int maxIndex = 2*i+1;
        while(maxIndex<length){
            if(maxIndex+1<length&&(m[maxIndex+1]>m[maxIndex])){
                maxIndex = maxIndex+1;
            }
            if(m[maxIndex]<tmp){
                break;
            }
            m[i] = m[maxIndex];
            i= maxIndex;
            maxIndex=2*i+1;
        }
        m[i] = tmp;
    }

    private static void mergeSort(int[] m,int left, int right,int[] tmp) {
        //归并排序 https://blog.csdn.net/k_koris/article/details/80508543
        if(left<right){
            int mid = (left+right)/2;
            mergeSort(m,left,mid,tmp);
            mergeSort(m,mid+1,right,tmp);
            merge(m,left,right,mid,tmp);
        }
    }

    private static int[] merge(int[] m,int left,int right,int mid,int[] tmp) {
        int i= left;
        int j= mid+1;
        int t=0;
        while(i<=mid&&j<=right){
            if(m[i]<m[j]){
                tmp[t++]= m[i++];
            }else{
                tmp[t++]= m[j++];
            }
        }
        while(i<=mid){
            tmp[t++]= m[i++];
        }
        while(j<=right){
            tmp[t++] = m[j++];
        }
        t= 0;
        while(left<=right){
            m[left++] = tmp[t++];
        }
        return m;
    }

    private static void quickSort(int[] m,int l ,int r) {
        //快速排序 https://www.cnblogs.com/skywang12345/p/3596746.html
        if(l<r){
            int i=l;
            int j=r;
            int x=m[i];
            while(i<j){
                while((i<j)&&m[j]>x){
                    j--;
                }
                if(i<j){
                    m[i++]=m[j];
                }
                while((i<j)&&m[i]<x){
                    i++;
                }
                if(i<j){
                    m[j--]=m[i];
                }
            }
            m[i] =x;
            quickSort(m,l,i-1);
            quickSort(m,i+1,r);
        }
    }


}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值