Java中的升序和降序問題
Java升序和降序
1.使用Arrays中的升序API(sort)進(jìn)行升序
代碼示例如下:
public class px {
public static void main(String[] args) {
int[] a={11,55,99,66,22,88,33};
System.out.println(Arrays.toString(a));//打印原有數(shù)組
Arrays.sort(a);
System.out.println(Arrays.toString(a));//打印排序后的數(shù)組
}
}2.使用comparator接口設(shè)置升序和降序
comparator接口只能使用引用元素進(jìn)行排序,在該接口比較器中,當(dāng)進(jìn)行升序排序時(shí),如果認(rèn)為左邊數(shù)據(jù)大于右邊數(shù)據(jù)則返回正整數(shù),右邊大于左邊返回負(fù)整數(shù),相等返回0,這樣就能進(jìn)行一個(gè)完整的升序排序操作。降序排序則反之,左>右為返回負(fù)整數(shù),以此類推。
代碼示例如下,以升序?yàn)槔?/p>
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};//引用類型的數(shù)組
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));
}
}運(yùn)行結(jié)果如下:

而我們的comparator還有一種簡便方法來進(jìn)行排序操作,即無需在該接口中進(jìn)行if語句的判斷,而是將兩個(gè)值直接相減,以此來判斷正負(fù)值。
代碼示例如下,以降序?yàn)槔?/p>
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));
}
}運(yùn)行結(jié)果如下:

升序和降序排序方法及原理
排序的思路是,冒泡排序是每一次取一個(gè)數(shù)與其它數(shù)進(jìn)行比較,如果你的數(shù)比另一個(gè)數(shù)大,兩個(gè)進(jìn)行位置交換,依次類推。
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);
//排序轉(zhuǎn)置
reverse(sortArr);
print(sortArr);
}
public static void sortArr(int arr[]) {
System.out.println("原始數(shù)組:");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
}
//升序排序
public static void sort(int arr[]) {
//外層控制總體的排序次數(shù)
for (int i = 0; i < arr.length; i++) {
//內(nèi)層控制的排序次數(shù)
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("排序數(shù)組:");
for (int i = 0; i < temp.length; i++) {
System.out.print(temp[i] + "\t");
}
}
//轉(zhuǎn)置排序
public static void reverse(int arr[]) {
System.out.println("排序轉(zhuǎn)置:");
//利用算法,在一個(gè)數(shù)組上完成所有的轉(zhuǎn)置操作
//原始數(shù)據(jù): 1、2、3、4、5、6、7、8
//第一次轉(zhuǎn)置:8、2、3、4、5、6、7、1
//第二次轉(zhuǎn)置:8、7、3、4、5、6、2、1
//第三次轉(zhuǎn)置:8、7、6、4、5、3、2、1
//第四次轉(zhuǎn)置:8、7、6、5、4、3、2、1
//轉(zhuǎn)換次數(shù):數(shù)組的長度除以2,它的長度是一個(gè)偶數(shù)
//那么問題來了,如果是一個(gè)奇數(shù),
//這就是問題,也就是說不管是一個(gè)偶數(shù)還是一個(gè)奇數(shù),轉(zhuǎn)軒換的次數(shù)完全是一樣的,所以不影響
int len = arr.length / 2;//轉(zhuǎn)換次婁
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--;
}
}
}以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
springboot?aop里的@Pointcut()的配置方式
這篇文章主要介紹了springboot?aop里的@Pointcut()的配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
SpringBoot使用@PathVariable進(jìn)行數(shù)據(jù)校驗(yàn)的流程步驟
在SpringBoot項(xiàng)目中,我們經(jīng)常需要從 URL 中獲取參數(shù)并進(jìn)行相關(guān)的數(shù)據(jù)校驗(yàn),而@PathVariable注解就是一種非常方便的方式,可以讓我們?cè)诜椒▍?shù)中直接獲取URL中的參數(shù),并進(jìn)行數(shù)據(jù)校驗(yàn),本文將介紹如何使用@PathVariable注解進(jìn)行數(shù)據(jù)校驗(yàn)2023-06-06

