java 常用排序

1、选择排序;

       从 1 - (n -1 )找到比 0 这个位置小的值;

        

arr = [3, 1, 2, 4, 8, 5, 5, 6, 3];

/**
 * i 
 * 0  (i + 1 ) - (n - 1) 找到比arr[0]小的数
 * 1  (i + 1 ) - (n - 1) 找到比arr[1]小的数
 * 2  (i + 1 ) - (n - 1) 找到比arr[2]小的数
 *
 */

for (int i = 0; i < arr.length; i++) {
    
    for (int j = i + 1; j < arr.length; j++) {
        if (arr[j-1] > arr[j]) {
            swap(arr, j - 1, j);
        }
    }
}



public static void swap(int[] arr, i, j) {
    int temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}

2、冒泡排序

        

int [] arr = {9, 1, 3, 2, 8, 4, 5};

/**
 * 每次循环对第一个元素和第二个元素进行比较, 若第一个大第二个则交换; 直到将最大的放到最后一个
 * 
 * 0 - n-1 找打最大的;依次交换位置;
 *
 *
 */
for (int i = arr.length - 1; i > 0; i -- ) {
    for (int j = 0; j < i; j ++) {
        if (arr[j] > arr[j + 1]) {
            swap(arr, j, j + 1);
        }
    }
}

3、插入排序

int [] arr = {9, 1, 3, 2, 8, 4, 5 , 0};

/**
 * 插入排序
 * 
 * 0 - 0  排序
 * 0 - 1  排序
 * 0 - 2  排序
 * 0 - 3  排序
 * 0 - n  ~
 *
 */

for (int i = 0; i < arr.length; i ++) {
    
    int newArrIndex = i;
    while(newArrIndex > 0 && arr[newArrIndex - 1] > arr[newArrIndex]) {    // 依次向前排序;直到找到第一个
        swap(arr, newArrIndex - 1, newArrIndex);
        newArrIndex -- ;
    }
    
} 



实现方式二:
    
    

/**
 * 插入排序
 * 
 * 0 - 0  排序
 * 0 - 1  排序
 * 0 - 2  排序
 * 0 - 3  排序
 * 0 - n  ~
 *
 */

for (int i = 0; i < arr.length; i ++) {
    for (int newArrIndex = i; newArrIndex > 0 && arr[newArrIndex - 1] > arr[newArrIndex]; newArrIndex -- ) {
        swap(arr, newArrIndex- 1, newArrIndex);
    } 
}











验证方法:

    public  static int[] randomArr(int arrMaxLength, int arrMaxValue) {
        int arrLength = (int) (Math.random() * arrMaxLength);
        int rtnArr[] = new int [arrLength];
        for (int i = 0; i < arrLength; i++) {
            rtnArr[i] = (int) (Math.random() * arrMaxValue);
        }

        return rtnArr;
    }

    public static boolean checkSortArr(int [] arr) {
        if (arr.length <= 0) return true;

        int count = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (count > arr[i]) {
                return false;
            }
            count = Math.max(count, i);
        }
        return true;
    }



    public static void main(String args[]) {

        for (int i = 0; i < 1000; i++) {
            int[] ints = randomArr(20, 8000);
            insertSort2(ints);
            if (!checkSortArr(ints)) {
                System.out.println("排序异常");
                System.out.println(Arrays.toString(ints));
            }
        }
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值