排序算法---选择、冒泡、插入、希尔

交换方法

public static void swap(int[] arr, int index1, int index2){
        arr[index1] ^= arr[index2];
        arr[index2] ^= arr[index1];
        arr[index1] ^= arr[index2];

    }

一、选择排序

public static void selectionSort(int[] arr){
       for (int i = 0; i < arr.length; i++) {
           int minPos = i;
           for (int j = i + 1; j < arr.length; j++) {
               if(arr[j] < arr[minPos]){
                   minPos = j;
               }
           }
           if(i == minPos){
               continue;
           }
           swap(arr,i, minPos);
       }
   }

二、冒泡排序

public static void bubbleSort(int[] arr){
       int len = arr.length;
       for(int P = len-1; P >= 0; P--){
           //判断是否排序完成
           int flag = 0;
           for(int i = 0; i < P; i++){
               if(arr[i] > arr[i+1]){
                   swap(arr,i, i+1);
                   flag = 1;
               }
           }
           //数组有序后,退出
           if(flag == 0) {
               break;
           }
       }
   }

三、插入排序

public static void insertionSort(int[] arr){
       int len = arr.length;

       for(int i = 1; i < len; i++){
           int temp = arr[i];
           int j = 0;
           for(j = i; j > 0 && arr[j-1] > temp; j--){
               arr[j] = arr[j-1];
           }
           arr[j] = temp;
       }
   }

四、希尔排序

优化的选择排序,按照间隔进行排序。默认间隔是N/2。

public static void shellSort(int[] arr){
        int len = arr.length;
        for(int D = len/2; D > 0; D /= 2){
            for(int P = D; P < len; P++){
                int temp = arr[P];
                int j = 0;
                for(j = P; j >= D && arr[j - D] > temp; j -= D){
                    arr[j] = arr[j-D];
                }
                arr[j] = temp;
            }
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值