第二十四節:Java語言基礎-講解數組的綜合應用

来源:https://www.cnblogs.com/dashucoding/archive/2018/08/10/9452724.html
-Advertisement-
Play Games

數組的綜合應用 冒泡排序 為什麼這個排序要叫冒泡呢?為什麼不叫其他名詞呢? 其實這個取名是根據排序演算法的基本思路命名的,見名知意,冒泡排序,就是想泡泡在水裡一樣,在水裡大的泡泡先浮出水面,就是大的先排出來,最小的最慢排出。 冒泡排序,是對排序的各個元素從頭到尾依次進行相鄰的大小比較, 比如你是隊長, ...


標題圖

數組的綜合應用

數組的綜合應用.png

// 列印數組
public static void printArray(int[] arr)
{
 for(int x=0;x<arr.length;x++)
 {
    if(x!=arr.length-1){
     System.out.print(arr[x]+",");
    }else{
     System.out.print(arr[x]);
    }
  }
}

數組轉字元串

// 數組轉換成為字元串
// 結果返還為字元串,參數為數組
public static String toString (int[] arr){
 // 定義字元串變數
 String temp = "[";
 for(int x = 0; x<arr.length; x++){
  // 判斷是否為最後一位元素
  if(x != arr.length - 1){
   temp = temp + arr[x] + ",";
  }else{
    temp = temp + arr[x] + "]";
   }
 }
}
public static String getWeek(int num){
 String[] weeks = { "1", "2", "3", "4", "5", "6", "7" };
 if(num>7 || num<1){
  return num + "沒有對應的星期";
 }
 return weeks[num];
}

選擇排序

選擇排序是第一個人和後續排序的人進行比較,若第一個人大於第二個人,就進行交換,那麼這時第一人就是最小的,然後這時的第一個人和第三個人進行比較,若這時的第一個人大於第三個人,就進行交換位置,這時第一個人又換人了,也變得更小了,就這樣,把剩下的人以這種方法進行比較,直到最後,第一輪結束,在第一位的就是最小的值。

這種就是排序演算法,比如有6個人,第一輪要進行5次比較。小的值往前跑嘛。

//第一輪  
for(int index=1;index<arr.length;index++)  
{  
if(arr[0]>arr[index])  
{  
  int temp = arr[0];  
  arr[0] = arr[index];  
  arr[index] = temp;  
}  
}  
print(arr);  
  
//第二輪  
for(int index=2;index<arr.length;index++)  
{  
if(arr[1]>arr[index])  
{  
  int temp = arr[1];  
  arr[1] = arr[index];  
  arr[index] = temp;  
}  
}  
print(arr);  
  
//第三輪  
for(int index=3;index<arr.length;index++)  
{  
if(arr[2]>arr[index])  
{  
  int temp = arr[2];  
  arr[2] = arr[index];  
  arr[index] = temp;  
}  
}  
print(arr);  
  
//第四輪  
for(int index=4;index<arr.length;index++)  
{  
if(arr[3]>arr[index])  
{  
  int temp = arr[3];  
  arr[3] = arr[index];  
  arr[index] = temp;  
 }  
}  
print(arr);  
  
//第五輪  
for(int index=5;index<arr.length;index++)  
{  
if(arr[4]>arr[index])  
{  
  int temp = arr[4];  
  arr[3] = arr[index];  
  arr[index] = temp;  
 }  
}  
print(arr);  
  
//第六輪沒有,我們arr.length=6舉例  
//int index = 6;index<arr.length; false  

優化:

public static void selectionSort(int[] arr)  
{  
for(int count=1;count<arr.length;count++)  
{  
 for(int index=count;index<arr.length;index++)  
 {  
  if(arr[count-1]>arr[index])  
  {  
    int temp = arr[count-1];  
    arr[count-1] = arr[index];  
    arr[index] = temp;  
  }  
 }  
}  
for(int x = 0;x<arr.length-1;x++)
{
 for(int y=x+1;y<arr.length;y++){
  if(arr[x]>arr[y]){
    int temp = arr[x];
    arr[x] = arr[y];
    arr[y] = temp;
  }
 }
}

冒泡排序

為什麼這個排序要叫冒泡呢?為什麼不叫其他名詞呢?

其實這個取名是根據排序演算法的基本思路命名的,見名知意,冒泡排序,就是想泡泡在水裡一樣,在水裡大的泡泡先浮出水面,就是大的先排出來,最小的最慢排出。

冒泡排序,是對排序的各個元素從頭到尾依次進行相鄰的大小比較,比如你是隊長,在你的面前有一排人,你要將其進行排序,依次按照從小到大排序。

怎麼理解最大的值被排除,你是隊長,你對面前的一群人看不慣,進行排序,從左到右開始,第一個和第二個進行比較,大的那個就被挑出來,與第三個進行比較,接下來就是依次按照這個方法比較,就能把那個最大的值,最高的給挑出來不是,這就是第一輪的比較。

接下來,最大的就不用跟他比較了,上面所述,在排序時,你面前的人,是不能亂動的,一旦比較哪個大,兩者就換位,如果第一比第二個小,就是第二個大時,兩者不用換位,第二個就與第三個進行比較。

依照這個方法,兩兩比較,大的都被排到了最後,那麼一旦排完,是不是都依照從小到大,(從低到高)的順序在你面前排好了。

代碼示例

我們用索引下標來解釋

//第一輪  
for(int index=0;index < arr.length-1; index++){  
//相鄰兩個比較  
 if(arr[index] > arr[index+1]){  
   int temp = arr[index];  
   arr[index] = arr[index+1];  
   arr[index+1] = temp;  
 }  
}  
  
print(arr);  
  
for(int index=0;index < arr.length-2;index++){  
//這裡arr.length-2,為什麼比上一次多減了1呢?  
//因為第一輪,把最大的排出來了,就不用比較了,少了一個人  
 if(arr[index] > arr[index+1]){  
   int temp = arr[index];  
   arr[index] = arr[index+1];  
   arr[index+1] = temp;  
 }  
}  
  
print(arr);  
  
for(int index=0;index < arr.length-3;index++){  
 if(arr[index]>arr[index+1]){  
   int temp = arr[index];  
   arr[index] = arr[index+1];  
   arr[index+1] = temp;  
 }  
}  
  
print(arr);  

優化:

for(int num=1;num<arr.length;num++){  
  
 for(int index=0;index<arr.length-num;index++){  
  
   if(arr[index]>arr[index+1]){  
     int temp = arr[index];  
     arr[index] = arr[index+1];  
     arr[index+1] = temp;  
   }  
 }  
}  
for(int x=0;x<arr.length-1;x++){
 for(int y=0;y<arr.length-1-x;y++){
  if(arr[y]>arr[y+1]){
   int temp = arr[y];
   arr[y] = arrp[y+1];
   arr[y+1] = temp;
   }
  }
}

二分查找,折半查找

什麼是二分查找,折半查找呢?就是我說一個數,你來猜,你答一個數,我說大了,或小了,直到找到為止。

public static int searchKey(int[] arr, int key){
 for(int x=0;x<arr.length;x++){
   if(arr[x] == key){
    rerurn x;
   }
  return -1;
  }
}

二分

public static int binarySearch(int[] arr, int key){
 int max,min,mid;
 min = 0;
 max = arr.length - 1;
 mid = (max+min)>>1;

 while(arr[mid] != key){
  if(key>arr[mid]){
    min = mid + 1;
  }else if(key<arr[mid])
    max = mid - 1;

   mid = (max+min)>>1;
  }
 return mid;
 }
}
public static int binarySearch(int[] arr, int key){
 int max, min , mid;
 min = 0;
 max = arr.length - 1;

 while(min <= max){
   mid = (min+max)>>1;
   if(key>arr[mid]){
    min = mid + 1;
   }else if(key < arr[mid])
    max = mid - 1;
   } else {
    return mid;
 }
 return -1;
}

二維數組

格式:

int[][] arr = new int[2][3];

int[][] arr = { {3,5,6}, {33,44,66}, {23,21,6} };

for(int x=0; x<arr.length; x++){
 for(int y=0; y<arr[x].length; y++){
   sum += arr[x][y];
  }
}
public static void revese(int[] arr){
 for(int start=0, end = arr.length-1; start<end; start++,end--){
  swap(arr,start,end);
 }
}

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

結語

  • 本文主要講解 Java語言基礎-講解數組的綜合應用
  • 下麵我將繼續對Java、 Android中的其他知識 深入講解 ,有興趣可以繼續關註
  • 小禮物走一走 or 點贊

送❤


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前兩天接手了同事的一個項目,是一個網站首頁,其中有段代碼很累贅,要實現的功能就是, 通過給父元素添加滑鼠移入移出事件,來控制子元素顯示隱藏。 html代碼,一共有四個父元素div,每個父元素嵌套一個子元素div, 這是截取了其中一個div: 最簡單粗暴的方法莫過於這樣: 直接寫八個方法,分別設置屬性 ...
  • 早期有很多關於Node.js爭論的焦點都在它的單線程模型方面,在由Jani Hartikainen寫的一篇著名的文章《PHP優於Node.js的五大理由》中,更有一條矛頭直接指向Node.js單線程脆弱的問題。 如果PHP代碼損壞,不會拖垮整個伺服器。 PHP代碼只運行在自己的進程範圍中,當某個請求 ...
  • 最近使用antd 做一個後臺管理系統中,業務場景下需要將數據導出為excel,後端使用POI,結果數據怎麼都無法生成,後面發現原來是前端限制了header 中可以接受的數據類型為json,無法接受blob的類型,後來改用了axios,就可以順利導出了,下麵是導出的代碼 ...
  • 異常, 迭代器, 包裝類, StringBuffer(基本使用), 容器Collection, TreeSet容器中排序, ...
  • 導言: 我們有時候需要將做好的Python程式打包成為一個exe , 方便我們使用,查找了資料發現 pyinstaller 、py2exe,最後還是選擇的pyinstaller,用的時候踩過了挺多的坑,在這裡記錄一下具體的用法。安裝的時候直接在cmd pip install pyinstaller ...
  • 需求出現/使用場景: 因為公司需要將word辦的介面文檔線上化,看起來是個很好的事情,但是就是苦逼了我們這些幹活的,其中工程量最大的就是參數的錄入,要是參數少也罷,有的介面動輒三四十個參數,更甚八九十個,我手動複製了一個三四十個的就讓我懷疑人生,我覺的我的人生不能在賦值介面參數中浪費掉。以前也學過一 ...
  • 記憶體限制:256 MiB 時間限制:2000 ms 標準輸入輸出 題目類型:傳統 評測方式:文本比較 上傳者: 匿名 【題目描述】 這是一道模板題。 維護一個 nnn 點的無向圖,支持: 加入一條連接 uuu 和 vvv 的無向邊 查詢 uuu 和 vvv 的連通性 由於本題數據較大,因此輸出的時候 ...
  • 面向對象 面向過程的代表主要是 語言,面向對象是相對面向過程而言, 是面向對象的編程語言,面向過程是通過函數體現,面向過程主要是功能行為。 而對於面向對象而言,將功能封裝到對象,所以面向對象是基於面向過程的。以前是主要以面向過程為思想,現在是將功能裝進對象中,如果要用到功能時,就調用該對象即可。 面 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...