Java中的升序和降序问题
剑小麟 人气:0Java升序和降序
1.使用Arrays中的升序API(sort)进行升序
代码示例如下:
public class px { public static void main(String[] args) { int[] a={11,55,99,66,22,88,33}; System.out.println(Arrays.toString(a));//打印原有数组 Arrays.sort(a); System.out.println(Arrays.toString(a));//打印排序后的数组 } }
2.使用comparator接口设置升序和降序
comparator接口只能使用引用元素进行排序,在该接口比较器中,当进行升序排序时,如果认为左边数据大于右边数据则返回正整数,右边大于左边返回负整数,相等返回0,这样就能进行一个完整的升序排序操作。降序排序则反之,左>右为返回负整数,以此类推。
代码示例如下,以升序为例:
package paixu; import java.util.Arrays; import java.util.Comparator; public class px { public static void main(String[] args) { int[] a={11,55,99,66,22,88,33}; System.out.println(Arrays.toString(a)); Arrays.sort(a); System.out.println(Arrays.toString(a)); Integer[] b={666,1,777,33,999,55,33};//引用类型的数组 Arrays.sort(b,new Comparator<Integer>() { //comparator接口 @Override public int compare(Integer t, Integer t1) { if (t > t1) { //升序排序操作 return 1; } else if (t < t1) { return -1; } return 0; } }); System.out.println(Arrays.toString(b)); } }
运行结果如下:
而我们的comparator还有一种简便方法来进行排序操作,即无需在该接口中进行if语句的判断,而是将两个值直接相减,以此来判断正负值。
代码示例如下,以降序为例:
package paixu; import java.util.Arrays; import java.util.Comparator; public class px { public static void main(String[] args) { // int[] a={11,55,99,66,22,88,33}; // System.out.println(Arrays.toString(a)); // Arrays.sort(a); // System.out.println(Arrays.toString(a)); Integer[] b={666,1,777,33,999,55,33}; Arrays.sort(b,new Comparator<Integer>() { @Override public int compare(Integer t, Integer t1) { return t1-t; } }); System.out.println(Arrays.toString(b)); } }
运行结果如下:
升序和降序排序方法及原理
排序的思路是,冒泡排序是每一次取一个数与其它数进行比较,如果你的数比另一个数大,两个进行位置交换,依次类推。
public class DemoMessage { public static void main(String[] arg) { int sortArr[] = new int[]{2, 1, 9, 0, 4, 5, 3, 7, 6, 8}; sortArr(sortArr); //排序升序 sort(sortArr); print(sortArr); //排序转置 reverse(sortArr); print(sortArr); } public static void sortArr(int arr[]) { System.out.println("原始数组:"); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + "\t"); } } //升序排序 public static void sort(int arr[]) { //外层控制总体的排序次数 for (int i = 0; i < arr.length; i++) { //内层控制的排序次数 for (int x = 0; x < arr.length - 1; x++) { if (arr[x] > arr[x + 1]) { int t = arr[x]; arr[x] = arr[x + 1]; arr[x + 1] = t; } } } System.out.println(); } public static void print(int temp[]) { System.out.println("排序数组:"); for (int i = 0; i < temp.length; i++) { System.out.print(temp[i] + "\t"); } } //转置排序 public static void reverse(int arr[]) { System.out.println("排序转置:"); //利用算法,在一个数组上完成所有的转置操作 //原始数据: 1、2、3、4、5、6、7、8 //第一次转置:8、2、3、4、5、6、7、1 //第二次转置:8、7、3、4、5、6、2、1 //第三次转置:8、7、6、4、5、3、2、1 //第四次转置:8、7、6、5、4、3、2、1 //转换次数:数组的长度除以2,它的长度是一个偶数 //那么问题来了,如果是一个奇数, //这就是问题,也就是说不管是一个偶数还是一个奇数,转轩换的次数完全是一样的,所以不影响 int len = arr.length / 2;//转换次娄 int head = 0;//开始索引 int tail = arr.length - 1;//尾部索引 for (int x = 0; x < len; x++) { int temp = arr[head]; arr[head] = arr[tail]; arr[tail] = temp; head++; tail--; } } }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
加载全部内容