七大排序算法

选择排序

package PaiXu;

import java.util.Random;

/**
 * 选择排序
 */
public class XuanZe {

	public static void main(String[] args) {
		int[] arr=new int[20000];
		for(int i=0;i<arr.length;i++){
			arr[i]=new Random().nextInt(100000);
			System.out.print(arr[i]+" ");
		}
		System.out.println();
		System.out.println("============================");
		long before = System.currentTimeMillis();
		bianLi(sort(arr));
		long after=System.currentTimeMillis();
		System.out.println();
		System.out.println("排序花费时间"+(after-before)+"毫秒");

	}

	public static int[] sort(int[] arr){
		for(int i=0;i<arr.length-1;i++){
			int minIndex=i;
			for(int j=i+1;j<arr.length;j++){
				if(arr[j]<arr[minIndex]){
					minIndex=j;
				}
			}
			int flag=arr[i];
			arr[i]=arr[minIndex];
			arr[minIndex]=flag;
		}
		return arr;
	}
	
	/**
	 * 遍历数组
	 * @param arr
	 */
	public static void bianLi(int[] arr){
		for(int i=0;i<arr.length;i++){
			System.out.print(arr[i]+" ");
		}
	}

}

冒泡排序

package PaiXu;

/**
 * 冒泡排序
 */
public class MaoPao {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int [] arr=sort(new int[]{2,5,41,3,7,4,6,52,34,1,564,84});
		bianLi(arr);
	}

	public static int[] sort(int[] arr){
		for(int i=0;i<arr.length-1;i++){
			for(int j=0;j<arr.length-i-1;j++){
				if(arr[j]>arr[j+1]){
					int flag=arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=flag;
				}
			}
		}
		return arr;
	}
	
	/**
	 * 遍历数组
	 * @param arr
	 */
	public static void bianLi(int[] arr){
		for(int i=0;i<arr.length;i++){
			System.out.print(arr[i]+" ");
		}
	}

}

插入排序

package PaiXu;

/**
 * @author xwm
 * @email 2825902051@qq.com
 * @date 2021/5/18 0018
 * @time 10:46
 */

import java.util.Random;

/**
 * 插入排序
 * 2,3,5,1,7,4,9,6
 */
public class ChaRu {
    public static void main(String[] args) {
        int[] arr=new int[10000];
        Random random=new Random();
        for(int i=0;i<arr.length;i++){
            arr[i]=random.nextInt(100000);
            System.out.print(arr[i]+" ");
        }

        System.out.println("\n排序后:");
        long before = System.currentTimeMillis();
        bianLi(sort(arr));
        System.out.println("\n排序花费时长"+(System.currentTimeMillis()-before));
    }

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


    /**
     * 遍历arr数组
     * @param arr
     */
    public static void bianLi(int[] arr){
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+" ");
        }
    }
}

快速排序

package PaiXu;

/**
 * @author xwm
 * @email 2825902051@qq.com
 * @date 2021/5/18 0018
 * @time 17:16
 */

/**
 * 快速排序
 */
public class KuaiSu {

    public static void main(String[] args) {
        int[] arr=new int[1000];
        for(int i=0;i<1000;i++){
            arr[i]=(int)(Math.random()*100000);
        }
        sort(arr);
        bianLi(arr);
    }

    public static void sort(int [] arr){
        int header=0;
        int rear=arr.length-1;
        sort(arr,header,rear);
    }

    public static void sort(int[] arr, int header, int rear) {
        if(header>=rear){
            return;
        }
        int divi=divide(arr,header,rear);

        sort(arr,header,divi-1);
        sort(arr,divi+1,rear);
    }

    public static int divide(int[] arr, int header, int rear) {
        int divid=arr[header];
        int min=header;
        int max=rear+1;
        while (true){
            while (arr[--max]>divid){
                if(max==header){
                    break;
                }
            }
            while (arr[++min]<divid){
                if(min==rear){
                    break;
                }
            }
            if(min>=max){
                break;
            }
            else {
                int flag=arr[max];
                arr[max]=arr[min];
                arr[min]=flag;
            }
        }
        int flag=arr[max];
        arr[max]=arr[header];
        arr[header]=flag;
        return max;
    }

    /**
     * 遍历arr数组
     * @param arr
     */
    public static void bianLi(int[] arr){
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+" ");
        }
    }
}

归并排序

package PaiXu;

/**
 * @author xwm
 * @email 2825902051@qq.com
 * @date 2021/5/18 0018
 * @time 17:16
 */

/**
 * 归并排序
 */
public class GuiBin {
    private static int[] copy;
    public static void main(String[] args) {
       int[] arr=new int[]{4,3,2,8,6,5,9,1,10,654,233,26,149,30,14,68,7,100};
       sort(arr);
       bianLi(arr);
    }

    public static void sort(int[] arr){
        int pre=0;
        int rear=arr.length-1;
        copy=new int[arr.length];
        sort(arr,pre,rear);
    }

    public static void sort(int[] arr, int pre, int rear) {
        //递归中止条件
        if(pre>=rear){
            return;
        }

        int mid=pre+(rear-pre)/2;
        sort(arr,pre,mid);
        sort(arr,mid+1,rear);

       guiBin(arr,pre,mid,rear);
    }

    public static void guiBin(int[] arr, int pre, int mid, int rear) {
        int copyPre=pre;
        int preIndex=pre;
        int midIndex=mid+1;
        while(preIndex<=mid && midIndex<=rear){
            if(arr[preIndex]>arr[midIndex]){
                copy[copyPre++]=arr[midIndex++];
            }
            else{
                copy[copyPre++]=arr[preIndex++];
            }
        }
        while (preIndex<=mid){
            copy[copyPre++]=arr[preIndex++];
        }
        while (midIndex<=rear){
            copy[copyPre++]=arr[midIndex++];
        }
        for(int i=0;i<=rear;i++){
            arr[i]=copy[i];
        }
    }

    /**
     * 遍历arr数组
     * @param arr
     */
    public static void bianLi(int[] arr){
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+" ");
        }
    }
}

希尔排序

package PaiXu;

/**
 * @author xwm
 * @email 2825902051@qq.com
 * @date 2021/5/18 0018
 * @time 12:25
 */

/**
 * 希尔排序
 */
public class XiEr {
    public static void main(String[] args) {
        bianLi(sort(new int[]{2,3,5,1,7,4,9,6,211,3,4,6,2,8,12}));
    }

    public static int[] sort(int[] arr){
        int l=1;
        while(l<arr.length/2){
            l=l*2+1;
        }
        while(l>=1){
            for(int i=l;i<arr.length;i++){
                int j=i;
                while (j>=l){
                    if(arr[j-l]>arr[j]){
                        int flag=arr[j-l];
                        arr[j-l]=arr[j];
                        arr[j]=flag;

                        j=j-l;
                    }
                    else {
                        break;
                    }
                }
            }
            l=l/2;
        }
        return arr;

    }
    /**
     * 遍历arr数组
     * @param arr
     */
    public static void bianLi(int[] arr){
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+" ");
        }
    }
}

堆排序

import java.util.ArrayList;

/**
 * @author xwm
 * @email 2825902051@qq.com
 * @date 2021/6/8 0008
 * @time 18:51
 */
public class ErChaDui<T extends Comparable<T>> {
    private ArrayList<T> list;
    public ErChaDui(int size) {
        list=new ArrayList(size);
    }
    public ErChaDui(){
        list=new ArrayList();
    }

    public ArrayList<T> getList(){
        return list;
    }
    public int size(){
        return list.size();
    }





    public void add(T t){
       list.add(t);
       this.up();
    }

    public T remove(){
        if(list.size()==0){
            return null;
        }
        swap(0,list.size()-1);
        T t=list.remove(list.size()-1);
        down();
        return t;
    }
    private void swap(int aIndex,int bIndex){
        T t= (T) list.get(aIndex);
        list.set(aIndex,list.get(bIndex));
        list.set(bIndex,t);
    }

    //上浮
    private void up() {
        if(list.size()==0){
            return;
        }
        int index=list.size()-1;
       while (index>0){
           if(list.get(index).compareTo(list.get(index-1))>0){
               if(list.get(index).compareTo(list.get((index-1)/2))>0){
                   swap(index,(index-1)/2);
                   index=(index-1)/2;
                   continue;
               }
               break;
           }
           else {
               if(list.get((index-1)/2).compareTo(list.get(index-1))<0){
                   swap(index-1,(index-1)/2);
                   index=(index-1)/2;
                   continue;
               }
               break;
           }
       }
    }

    //下沉
    public void down(){
        int index=0;
        while ((index*2+2)<=list.size()-1){
            if(list.get(index*2+1).compareTo(list.get(index*2+2))>0){
                if(list.get(index).compareTo(list.get(index*2+1))<0){
                    swap(index,index*2+1);
                    index=index*2+1;
                    continue;
                }
                break;
            }
            else {
                if(list.get(index).compareTo(list.get(index*2+2))<0){
                    swap(index,index*2+2);
                    index=index*2+2;
                    continue;
                }
                break;
            }
        }
    }
    public void list(){
        for (T t : list) {
            System.out.print(t+" ");
        }
    }
    public static void main(String[] args) {
        ErChaDui arr=new ErChaDui();
        arr.add(4);
        arr.add(1);
        arr.add(2);
        arr.add(5);
        arr.add(3);
        Comparable remove = arr.remove();
        while (remove!=null){
            System.out.println(remove);
            remove=arr.remove();
        }
    }


}

测试类

package PaiXu;

/**
 * @author xwm
 * @email 2825902051@qq.com
 * @date 2021/5/18 0018
 * @time 16:08
 */
public class Test {
    public static void main(String[] args) {
        long before=System.currentTimeMillis();
        XiEr.sort(getArr());
        long after=System.currentTimeMillis();
        System.out.println("希尔排序花费时长:"+(after-before)+"ms");

        /*long before=System.currentTimeMillis();
        ChaRu.sort(getArr());
        long after=System.currentTimeMillis();
        System.out.println("插入排序花费时长:"+(after-before)+"ms");*/

        /*long before=System.currentTimeMillis();
        GuiBin.sort(getArr());
        long after=System.currentTimeMillis();
        System.out.println("归并排序花费时长:"+(after-before)+"ms");*/

        /*long before=System.currentTimeMillis();
        KuaiSu.sort(getArr());
        long after=System.currentTimeMillis();
        System.out.println("快速排序花费时长:"+(after-before)+"ms");*/
    }
    public static int[] getArr(){
        int[] arr=new int[100000];
        for(int i=99999;i>=0;i--){
            arr[i]=99999-i;
        }
        return arr;
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小呆萌熊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值