前n个升序剩下的降序 发表于 2019-07-22 | 分类于 笔试题 , java , 数组排序 题目 代码 题目给一个数字前k个数升序排列,剩下的降序排列: 代码123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475/** * 对数组前k的数字使用一种排序,剩下的用另一种排序. * * @param array * 整型数组. * @param k * @param isAscendingFirst * 如果为true表示第一部分升序,剩下的降序. */public static void bubbleSortSplit(int[] array, int k, boolean isAscendingFirst){ // 前面升序后面降序 if (isAscendingFirst) { for (int i = 1; i < array.length; i++) { for (int j = 1; j < array.length - i + 1; j++) { if (j < k) { // 升序排列:前面的要大于后面的元素 // 所以当前面小的时候要交换 if (array[j] < array[j - 1]) { array[j] ^= array[j - 1]; array[j - 1] ^= array[j]; array[j] ^= array[j - 1]; } } else { // 降序排列:前面的要小于后面的元素 // 所以当前面大的时候要交换 if (array[j] > array[j - 1]) { array[j] ^= array[j - 1]; array[j - 1] ^= array[j]; array[j] ^= array[j - 1]; } } } } } // 前面降序后面升序 else { for (int i = 1; i < array.length; i++) { for (int j = 1; j < array.length - i + 1; j++) { if (j < k) { // 降序排列:前面的要小于后面的元素 // 所以当前面大的时候要交换 if (array[j] > array[j - 1]) { array[j] ^= array[j - 1]; array[j - 1] ^= array[j]; array[j] ^= array[j - 1]; } } else { // 升序排列:前面的要大于后面的元素 // 所以当前面小的时候要交换 if (array[j] < array[j - 1]) { array[j] ^= array[j - 1]; array[j - 1] ^= array[j]; array[j] ^= array[j - 1]; } } } } }} 打赏 微信支付 支付宝