Java中的升序和降序問題
Java升序和降序
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));//打印原有數(shù)組 Arrays.sort(a); System.out.println(Arrays.toString(a));//打印排序后的數(shù)組 } }
2.使用comparator接口設(shè)置升序和降序
comparator接口只能使用引用元素進行排序,在該接口比較器中,當(dāng)進行升序排序時,如果認(rèn)為左邊數(shù)據(jù)大于右邊數(shù)據(jù)則返回正整數(shù),右邊大于左邊返回負(fù)整數(shù),相等返回0,這樣就能進行一個完整的升序排序操作。降序排序則反之,左>右為返回負(fù)整數(shù),以此類推。
代碼示例如下,以升序為例:
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)); } }
運行結(jié)果如下:
而我們的comparator還有一種簡便方法來進行排序操作,即無需在該接口中進行if語句的判斷,而是將兩個值直接相減,以此來判斷正負(fù)值。
代碼示例如下,以降序為例:
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)); } }
運行結(jié)果如下:
升序和降序排序方法及原理
排序的思路是,冒泡排序是每一次取一個數(shù)與其它數(shù)進行比較,如果你的數(shù)比另一個數(shù)大,兩個進行位置交換,依次類推。
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)置:"); //利用算法,在一個數(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,它的長度是一個偶數(shù) //那么問題來了,如果是一個奇數(shù), //這就是問題,也就是說不管是一個偶數(shù)還是一個奇數(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--; } } }
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Data Jpa 自動生成表結(jié)構(gòu)的方法示例
這篇文章主要介紹了Spring Data Jpa 自動生成表結(jié)構(gòu)的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04Java socket通信模擬QQ實現(xiàn)多人聊天室
Socket在Java實戰(zhàn)網(wǎng)絡(luò)通信編程應(yīng)用中有非常重要的作用,你想要跟別人聯(lián)系都得通過socket占據(jù)端口來實現(xiàn),掌握Socket技術(shù)不僅在聊天應(yīng)用程序中需要用到(比如QQ什么的都都是用socket來寫的),而且對于學(xué)習(xí) Asp.net 也非常有幫助2022-07-07Spring?容器初始化?register?與?refresh方法
這篇文章主要介紹了Spring?容器初始化?register?與?refresh方法,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-07-07Java easyexcel導(dǎo)出報內(nèi)存溢出的問題解決
在Java開發(fā)時,使用EasyExcel處理大數(shù)據(jù)量導(dǎo)出可能遇到內(nèi)存溢出問題,本文深入分析了內(nèi)存溢出的原因,并提出了優(yōu)化策略,感興趣的可以了解一下2024-10-10Java實現(xiàn)數(shù)據(jù)庫連接的最詳細(xì)教程分享
JDBC,Java?Database?Connectivity,即Java數(shù)據(jù)庫連接,是?Java?中的一套和數(shù)據(jù)庫進行交互的API,本文就來講講Java如何利用JDBC實現(xiàn)數(shù)據(jù)庫的連接吧2023-05-05java中g(shù)radle項目報錯org.gradle?.api.plugins.MavenPlugin解決辦法
在使用Gradle時開發(fā)者可能會遇到org.gradle?.api.plugins.MavenPlugin報錯提醒,這篇文章主要給大家介紹了關(guān)于java中g(shù)radle項目報錯org.gradle?.api.plugins.MavenPlugin的解決辦法,需要的朋友可以參考下2023-12-12