java常用排序案例

冒泡排序

 /**
     * 冒泡排序
     * @param
     */
    public static void main(String[] args){
        int [] a = {2,8,7,4,9,3,1,6,7};
        int b =0;
        for(int i=0;i<a.length-1;i++){
            for(int j=0;j<a.length-1;j++){
                if(a[j]>a[j+1]){
                    //将两者中较小的值复制给临时变量b
                    b=a[j+1];
                    //然后将较大值赋值给第二个数a[j+1]
                    a[j+1]=a[j];
                    //将较小值赋值到第一个数
                    a[j]=b;
                }
                System.out.println(b);
            }
        }
        System.out.println("冒泡排序后结果 :");
        for(int i=0;i<a.length;i++){
            System.out.print(a[i]);
        }
        System.out.println();
        System.out.println("冒泡排序后结果 :");
        for(int num: a){
        System.out.print(num);
        }
    }

打印结果
在这里插入图片描述

降序排序最基础写法

 /**
     * 降序排序
     * @param
     */
    public static void main(String[] args){
        int [] a = {2,8,7,4,9,3,1,6,7};
        int b =0;
        for(int i=0;i<a.length-1;i++){
            for(int j=0;j<a.length-1;j++){
                //降序和冒泡排序一样  将这个判断大于改成小于就行了
                if(a[j]<a[j+1]){
                    b=a[j+1];
                    a[j+1]=a[j];
                    a[j]=b;
                }
                System.out.println(b);
            }
        }
        System.out.println("降序排序结果 :");
        for(int i=0;i<a.length;i++){
            System.out.print(a[i]);
        }
        System.out.println();
        System.out.println("降序排序结果 :");
        for(int num: a){
        System.out.print(num);
        }
    }

打印结果
在这里插入图片描述
降序排序另外一个种写法,Java中sort实现降序排序

    /**
     * 利用Collections的reverseOrder方法实现降序
     * @param args
     */

    public static void main(String[] args) {
        Integer[] a = {9, 8, 7, 2, 3, 4, 1, 0, 6, 5};
        Arrays.sort(a, Collections.reverseOrder());
        System.out.println("降序排序结果:");
        for (Integer num : a) {
            System.out.print(num);
        }
    }

打印结果
在这里插入图片描述
直接插入排序

 /**
     * 直接插入排序
     * @param args
     */

    public static void main(String[] args) {
        int [] arr= {1,4,6,8,2,5,3,7,9};
        int temp;
        System.out.println("数组排序前顺序:");
        for(int n : arr){
            System.out.print(n+" ");
        }
        //直接插入排序
        //外层循环确定待比较数值
        for (int i=1;i<arr.length;i++) {  //必须i=1,因为开始从第二个数与第一个数进行比较
            temp = arr[i];  //待比较数值
            int j;
            //内层循环为待比较数值确定其最终位置
            for (j = i - 1;j>=0 && arr[j]>temp;j--) {  //待比较数值比前一位置小,应插往前插一位
                //将大于temp的值整体后移一个单位
                arr[j+1] = arr[j];
            }
            arr[j+1] = temp; //待比较数值比前一位置大,最终位置无误
        }
        System.out.println();
        System.out.println("数组排序后顺序:");
        for(int n : arr){
            System.out.print(n+" ");
        }

    }

第二种写法

  public static  void main(String [] args){
        int []a = {4,9,8,7,6,3,15,98,1};
        int b=0;

        for(int i=1;i<a.length;i++){
            for(int j =i;j>0;j--){
                if (a[j]<a[j-1]){
                    b=a[j-1];
                   a[j-1]=a[j];
                   a[j]=b;
                }
            }
        }
        for(int i=0;i<a.length;i++){
            System.out.print(a[i]+" ");
        }
    }

打印结果
在这里插入图片描述
希尔排序

  /**
     * 希尔排序
     * @param args
     */

    public static void main(String[] args) {
        int [] a= {1,4,6,8,2,5,3,7,9};
        int len=a.length;//单独把数组长度拿出来,提高效率
        int number = 0;
        while(len!=0){
            len=len/2;
            for(int i=0;i<len;i++){//分组
                for(int j=i+len;j<a.length;j+=len){//元素从第二个开始
                    int k=j-len;//k为有序序列最后一位的位数
                    int temp=a[j];//要插入的元素
                    for(;k>=0&&temp<a[k];k-=len){
                        a[k+len]=a[k];

                    }

                    number++;//比较次数
                    a[k+len]=temp;
                    System.out.print(a[k+len]+" ");
                }
            }
        }
        System.out.println("循环次数= "+number);
        System.out.println("数组排序后的结果");
        for(int num : a){
            System.out.print(num);
        }

    }

堆排序

 /**
     * 堆排序
     */
    public static void main(String[] args) {
        int [] a= {1,4,6,8,2,5,3,7,9};
        //构造初始堆,从第一个非叶子节点开始调整,左右孩子节点中较大的交换到父节点中
        for (int i = (a.length) / 2 - 1; i >= 0; i--) {
            headAdjust(a, a.length, i);
        }
        //排序,将最大的节点放在堆尾,然后从根节点重新调整
        for (int i = a.length - 1; i >= 1; i--) {
            int temp = a[0];
            a[0] = a[i];
            a[i] = temp;
            headAdjust(a, i, 0);
        }
        System.out.println("排序后结果:");
        for (int num : a) {
            System.out.print(num + " ");
        }
    }

    private static void headAdjust(int[] a, int len, int i) {
        int k = i, temp = a[i], index = 2 * k + 1;
        while (index < len) {
            if (index + 1 < len) {
                if (a[index] < a[index + 1]) {
                    index = index + 1;
                }
            }
            if (a[index] > temp) {
                a[k] = a[index];
                k = index;
                index = 2 * k + 1;
            } else {
                break;
            }
        }
        a[k] = temp;
    }

打印结果
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值