Java【06】數組查找(二分查找)、排序(冒泡排序、簡單選擇排序)

1. 數組的操作
1.1 數組的反轉
int[] arrs={3,5,7,8,9};
編寫程序,讓arrs中的數據進行反轉{9,8,7,5,3}

1.2數組的查找
① 順序查找
從頭到尾一個一個的找!
② 二分查找
對數組有一個要求:數組必須是有序(大小)的!
int num=3;
int[] arrs={3,5,7,8,9};//從小-大的順序

1.3 排序
int[] arrs={3,15,7,28,9};
編寫程序,讓arrs是有序的!(小-大、大-小)
① 冒泡排序(5個數據)
冒第一個泡,寫一個循環,讓數組中的最大值出現在數組的最后一個位置
冒第二個泡,寫一個循環,讓數組中的第二大值出現在數組的最倒數第二個位置
...
兩兩對比,大值放在后面!5個數數據,冒最大的泡,需要對比多少次?4次
{3,15,7,28,9}
{3,7,15,28,9}
{3,7,15,28,9}
{3,7,15,9,28}

② 簡單選擇排序
找到數組中的最大值,放在最后一個位置
找到數組中第二大的值,放在倒數第二個位置

{3,15,7,28,9}
int max=28;
int index=3;
將index和最后一個位置進行交換
{3,15,7,9,28}
int max=15;
int index=1;
將index和倒數第二個位置進行交換
{3,9,7,15,28}


示例:數組的反轉(兩種思路)
public class Demo1{
? ? public static void main(String[] args){
? ? ? ? int[] arrs={3,5,7,8,9,5};// 6/2=3 ? 5/2=2
? ? ? ? //1. 新建一個數組,然后倒序復制
? ? ? ? /*int[] newArrs=new int[arrs.length];
? ? ? ? for(int i=0,j=arrs.length-1;i<arrs.length;i++,j--){
? ? ? ? ? ? newArrs[i]=arrs[j];
? ? ? ? }
? ? ? ? arrs=newArrs;
? ? ? ??
? ? ? ? for(int i=0;i<arrs.length;i++){
? ? ? ? ? ? System.out.println(arrs[i]);
? ? ? ? }*/

? ? ? ? //2. 對原數組首尾交換 ? 【設置臨時變量,交換值】
? ? ? ? for(int i=0;i<arrs.length/2;i++){
? ? ? ? ? ? /*
? ? ? ? ? ? ? ? 0 ? ? 4 ? ? i ? ? ?arrs.length-i-1
? ? ? ? ? ? ? ? 1 ? ? 3
? ? ? ? ? ? */
? ? ? ? ? ? int temp=arrs[i];
? ? ? ? ? ? arrs[i]=arrs[arrs.length-i-1];
? ? ? ? ? ? arrs[arrs.length-i-1]=temp;
? ? ? ? }
? ? ? ? for(int i=0;i<arrs.length;i++){
? ? ? ? ? ? System.out.println(arrs[i]);
? ? ? ? }
? ? ? ??
? ? }
}


示例:二分查找(數組必須已排序)
public class Demo2{
? ? public static void main(String[] args){
? ? ? ? int[] arrs={3,5,7,8,9,15,26};
? ? ? ? int num=14;//找num在數組中的位置
? ? ? ? //left和right就是我們查找的范圍
? ? ? ? int left=0;
? ? ? ? int right=arrs.length-1;
? ? ? ? int mid=(left+right)/2;//查找范圍的中間索引
? ? ? ? int index=-1; //默認設置-1,沒找到
? ? ? ? while(left<=right){//循環多少次不清楚!
? ? ? ? ? ? if(num==arrs[mid]){
? ? ? ? ? ? ? ? index=mid;
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }else if(num>arrs[mid]){//小了
? ? ? ? ? ? ? ? left=mid+1;
? ? ? ? ? ? }else if(num<arrs[mid]){//大了
? ? ? ? ? ? ? ? right=mid-1;
? ? ? ? ? ? }
? ? ? ? ? ? mid=(left+right)/2;//mid要從新計算一次
? ? ? ? }
? ? ? ??
? ? ? ? System.out.println(index);
? ? }
}

輸出:
-1


示例:冒泡排序
public class Demo3{
? ? public static void main(String[] args){
? ? ? ? int[] arrs={3,15,7,28,9};//五個數據,需要冒幾個泡呢?4個泡
? ? ? ? for(int j=0;j<arrs.length-1;j++){//控制冒幾個泡
? ? ? ? ? ? for(int i=0;i<arrs.length-1-j;i++){
? ? ? ? ? ? ? ? if(arrs[i]<arrs[i+1]){ ?// 前<后,交換,則按降序排列;反之 arrs[i]>arrs[i+1] 則升序
? ? ? ? ? ? ? ? ? ? //如果進入if,需要交換位置
? ? ? ? ? ? ? ? ? ? int temp=arrs[i];
? ? ? ? ? ? ? ? ? ? arrs[i]=arrs[i+1];
? ? ? ? ? ? ? ? ? ? arrs[i+1]=temp;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? ? ??
? ? ? ? //1. 冒第一個泡
? ? ? ? /*for(int i=0;i<arrs.length-1-0;i++){
? ? ? ? ? ? if(arrs[i]>arrs[i+1]){
? ? ? ? ? ? ? ? //如果進入if,需要交換位置
? ? ? ? ? ? ? ? int temp=arrs[i];
? ? ? ? ? ? ? ? arrs[i]=arrs[i+1];
? ? ? ? ? ? ? ? arrs[i+1]=temp;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ??
? ? ? ? //arrs={3,7,15,9,28}
? ? ? ? //將第二個泡,放在倒數第二個位置
? ? ? ? for(int i=0;i<arrs.length-1-1;i++){
? ? ? ? ? ? if(arrs[i]>arrs[i+1]){
? ? ? ? ? ? ? ? //如果進入if,需要交換位置
? ? ? ? ? ? ? ? int temp=arrs[i];
? ? ? ? ? ? ? ? arrs[i]=arrs[i+1];
? ? ? ? ? ? ? ? arrs[i+1]=temp;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? //arrs={3,7,9,15,28}
? ? ? ? //將第三個泡,放在倒數第三個位置
? ? ? ? for(int i=0;i<arrs.length-1-2;i++){
? ? ? ? ? ? if(arrs[i]>arrs[i+1]){
? ? ? ? ? ? ? ? //如果進入if,需要交換位置
? ? ? ? ? ? ? ? int temp=arrs[i];
? ? ? ? ? ? ? ? arrs[i]=arrs[i+1];
? ? ? ? ? ? ? ? arrs[i+1]=temp;
? ? ? ? ? ? }
? ? ? ? }*/

? ? ? ??
? ? ? ? for(int i=0;i<arrs.length;i++){
? ? ? ? ? ? System.out.println(arrs[i]);
? ? ? ? }
? ? }
}

輸出:
28
15
9
7
3


示例:簡單選擇排序
public class Demo4{
? ? public static void main(String[] args){
? ? ? ? int[] arrs={3,15,7,28,9};
? ? ? ? //找第一個最大值及其下標,然后和最后一個位置進行交換
? ? ? ??
? ? ? ? for(int j=0;j<arrs.length-1;j++){//找最大值的次數?4
? ? ? ? ? ? int max=arrs[0];
? ? ? ? ? ? int index=0;
? ? ? ? ? ? for(int i=1;i<arrs.length-j;i++){
? ? ? ? ? ? ? ? if(arrs[i]>max){ //后>前,交換,則升序
? ? ? ? ? ? ? ? ? ? max=arrs[i];
? ? ? ? ? ? ? ? ? ? index=i;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? // ? index ? 和 ? arrs.length-1-j
? ? ? ? ? ? if(index!=arrs.length-1-j){
? ? ? ? ? ? ? ? int temp=arrs[index];
? ? ? ? ? ? ? ? arrs[index]=arrs[arrs.length-1-j];
? ? ? ? ? ? ? ? arrs[arrs.length-1-j]=temp;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ??
? ? ? ??
? ? ? ? for(int i=0;i<arrs.length;i++){
? ? ? ? ? ? System.out.println(arrs[i]);
? ? ? ? }
? ? }
}

輸出:
3
7
9
15
28


【10】安裝 idea
ideaIU-Ultimate-2019.2.3.exe

3. idea的配置
項目中包含n個模塊(每一天新建一個新的模塊)
新建模塊:在項目上,右鍵->new->module
選擇java
jdk要選擇自己電腦上安裝的jdk1.8(第一次如果沒有,后面也是添加一個)
起一個模塊名
java0224(項目)->day06(模塊)->src(源碼)->右鍵-new-java class(新建java文件)
編寫源程序-->編譯是自動的-->直接運行

main方法運行不了,解決步驟:
① 在當前項目內創建文件目錄out
② 在彈框點擊ok后,在最下方有一個目錄選擇,選擇剛剛創建的out目錄

項目創建的時候是空項目!(創建非空項目也是需要選擇jdk)

? ? 配置目錄的介紹:
1. 安裝完idea之后,會在c盤默認生成兩個目錄(idea的所有配置信息)
C:\Users\用戶名\.IntelliJIdea2019.2\system和config
2. 如果想要回到剛剛安裝的情況!可以將這兩個目錄刪除!(激活也需要重新激活)
3. 詳細配置
3.1 運行內存的配置(idea在電腦占多大內存)
idea的安裝目錄/bin/idea64.exe.vmoptions
-Xms512m
-Xmx1500m
-XX:ReservedCodeCacheSize=500m
3.2 如何打開詳細配置界面
(1)顯示工具欄
(2)選擇詳細配置菜單和按鈕
3.3 默認啟動項目配置
3.4 設置整體主題
(1)選擇主題
(2)設置菜單和窗口字體和大小(修改的并不是編輯器的字體大小)
3.5 編輯器
(1)編輯器主題
(2)字體大小與顏色(只修改編輯器的字體大小)
3.6 自動提示功能
3.7 設置編碼(編輯器的編碼)
必須要配置成utf-8(通用一致)
3.8 設置自動編譯
3.9 取消自動更新(必須做的)
3.10 項目的JDK設置

4. 快捷鍵
- 保存:Ctrl + S
- 剪切:Ctrl + X
- 粘貼:Ctrl + V
- 復制:Ctrl + C
- 全選:Ctlr + A
- 撤銷:Ctrl + Z

萬能提示:Alt + 回車 ? ★
使用XX塊環繞:Ctrl + Alt + T
在當前光標下一行插入空行開始編輯:Shift + 回車
在當前光標上一行插入空行開始編輯:Ctrl+Alt+回車
復制行:Ctrl+D
刪除行:Ctrl + Y
- 單行注釋:Ctrl + /
- 多行注釋:Ctrl + Shift + /
搜索:ctrl+n
取消:雙擊shift是搜索

快捷鍵:idea支持自定義和修改(前期先不要修改)
敲了一個快捷鍵,但是你不知道是什么?直接問!
5. 模板
main:public static void main(String[] args){}
sout:System.out.println();
soutv:System.out.println("變量名 = " + 變量);
變量.sout/soutv System.out.println("變量名 = " + 變量);
fori:for循環

模板:idea也是可以自定義的(前期先不要自定義)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/80582.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/80582.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/80582.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redis 基礎詳解:從入門到精通

在當今互聯網應用開發領域&#xff0c;數據存儲與處理的性能和效率至關重要。Redis&#xff08;Remote Dictionary Server&#xff09;作為一款開源的、基于內存的鍵值存儲系統&#xff0c;憑借其出色的性能和豐富的功能&#xff0c;被廣泛應用于數據庫、緩存、消息中間件等場景…

圖片轉ICO圖標工具

圖片轉ICO圖標 可批量操作 下載地址&#xff1a; 鏈接&#xff1a;https://pan.quark.cn/s/6312c565ec98 這個工具是一個批量圖片轉ICO圖標的神器&#xff0c;有了它&#xff0c;以后再也不用為ICO格式的轉換煩惱&#xff01;而且這個軟件特別小巧&#xff0c;完全不用安裝。…

0基礎 | L298N電機驅動模塊 | 使用指南

引言 在嵌入式系統開發中&#xff0c;電機驅動是一個常見且重要的功能。L298N是一款高電壓、大電流電機驅動芯片&#xff0c;廣泛應用于各種電機控制場景&#xff0c;如直流電機的正反轉、調速&#xff0c;以及步進電機的驅動等。本文將詳細介紹如何使用51單片機來控制L298N電…

Flink 系列之十五 - 高級概念 - 窗口

之前做過數據平臺&#xff0c;對于實時數據采集&#xff0c;使用了Flink。現在想想&#xff0c;在數據開發平臺中&#xff0c;Flink的身影幾乎無處不在&#xff0c;由于之前是邊用邊學&#xff0c;總體有點混亂&#xff0c;借此空隙&#xff0c;整理一下Flink的內容&#xff0c…

大疆卓馭嵌入式面經及參考答案

FreeRTOS 有哪 5 種內存管理方式&#xff1f; heap_1.c&#xff1a;這種方式簡單地在編譯時分配一塊固定大小的內存&#xff0c;在整個運行期間不會進行內存的動態分配和釋放。它適用于那些對內存使用需求非常明確且固定&#xff0c;不需要動態分配內存的場景&#xff0c;優點是…

Java 線程池原理

Java 線程池是一種管理和復用線程的機制&#xff0c;其原理如下&#xff1a; 核心概念 線程池的初始化 &#xff1a;在創建線程池時&#xff0c;需要設置一些關鍵參數&#xff0c;如核心線程數&#xff08;corePoolSize&#xff09;、最大線程數&#xff08;maximumPoolSize&am…

大模型都有哪些超參數

大模型的超參數是影響其訓練效果、性能和泛化能力的關鍵設置,可分為以下幾大類別并結合實際應用進行詳細說明: 一、訓練過程相關超參數 學習率(Learning Rate) 作用:控制參數更新的步長,直接影響收斂速度和穩定性。過高會導致震蕩或過擬合,過低則收斂緩慢。調整策略:初…

路由器斷流排查終極指南:從Ping測試到Wireshark抓包5步定位法

測試路由器是否出現“斷流”&#xff08;網絡連接間歇性中斷&#xff09;&#xff0c;需通過多維度排查硬件、軟件及外部干擾因素。以下是詳細步驟指南&#xff1a; 一、基礎環境準備 設備連接 有線測試&#xff1a;用網線將電腦直接連接路由器LAN口&#xff0c;排除WiFi干擾。…

低代碼開發:開啟軟件開發的新篇章

摘要 低代碼開發作為一種新興的軟件開發方式&#xff0c;正在迅速改變傳統軟件開發的模式和效率。它通過可視化界面和預設的模板&#xff0c;使非專業開發者也能夠快速構建應用程序&#xff0c;極大地降低了開發門檻和成本。本文將深入探討低代碼開發的定義、優勢、應用場景以及…

基于Django汽車數據分析大屏可視化系統項目

基于Django汽車數據分析大屏可視化系統項目 一、項目概述 本項目是一個基于 Python 的汽車數據分析大屏可視化系統&#xff0c;旨在通過直觀的可視化界面展示汽車相關數據&#xff0c;幫助用戶更好地理解和分析汽車市場動態、車輛性能等信息。系統采用前后端分離的架構&#…

WebRTC通信原理與流程

1、服務器與協議相關 1.1 STUN服務器 圖1.1.1 STUN服務器在通信中的位置圖 1.1.1 STUN服務簡介 STUN&#xff08;Session Traversal Utilities for NAT&#xff0c;NAT會話穿越應用程序&#xff09;是一種網絡協議&#xff0c;它允許位于NAT&#xff08;或多重 NAT&#xff09;…

Beta分布--貝葉斯建模概率或比例常用分布

Beta分布是一種定義在區間 ([0, 1]) 上的連續概率分布&#xff0c;常用于描述比例或概率的不確定性。它的形狀由兩個正參數 (\alpha)&#xff08;alpha&#xff09;和 (\beta)&#xff08;beta&#xff09;控制&#xff0c;能夠呈現多種形態&#xff08;如對稱、偏態、U型等&am…

深度學習算法:開啟智能時代的鑰匙

引言 深度學習作為機器學習的一個分支&#xff0c;近年來在圖像識別、自然語言處理、語音識別等多個領域取得了革命性的進展。它的核心在于構建多層的神經網絡&#xff0c;通過模仿人腦處理信息的方式&#xff0c;讓機器能夠從數據中學習復雜的模式。 深度學習算法的基本原理…

深入了解linux系統—— 自定義shell

shell的原理 我們知道&#xff0c;我們程序啟動時創建的進程&#xff0c;它的父進程都是bash也就是shell命令行解釋器&#xff1b; 那bash都做了哪些工作呢&#xff1f; 根據已有的知識&#xff0c;我們可以簡單理解為&#xff1a; 輸出命令行提示符獲取并解析我們輸入的指令…

Redux和Vuex

為什么React和Vue需要Redux和Vuex 狀態管理需求的演變 #mermaid-svg-GaKl3pkZ82yc1m8E {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GaKl3pkZ82yc1m8E .error-icon{fill:#552222;}#mermaid-svg-GaKl3pkZ82yc1m8E…

Kubernetes排錯(十三):Pod間偶發超時問題排查

在微服務架構中&#xff0c;Pod間偶發的通信超時是最令人頭疼的問題之一。本文將通過生產環境中的真實案例&#xff0c;手把手教你定位這類"幽靈問題"。 一、快速定位問題方向&#xff08;5分鐘縮小范圍&#xff09; 1. 基礎檢查三板斧 # 檢查Service與Endpoint映…

Nginx 源碼安裝成服務

一、環境準備 一臺裝有 CentOS 7.9 的虛擬機&#xff08;IP: 192.168.40.81&#xff09;nginx-1.21.6.tar.gz 安裝包一個&#xff08;版本隨意&#xff09; 二、安裝 1&#xff09;解壓 nginx-1.21.6.tar.gz tar -xzvf nginx-1.21.6.tar.gz -tar&#xff1a;這是一個在 Linu…

L51.【LeetCode題解】438. 找到字符串中所有字母異位詞(四種方法)

目錄 1.題目 2.分析 暴力解法 方法1:排序(超時) 方法2:哈希表(險過) ★判斷兩個哈希表是否相同算法(通用方法,必須掌握) 能相等的前提:兩個哈希表的大小相等 哈希表有迭代器,可以使用范圍for從頭到尾遍歷 提交結果 優化方法:定長滑動窗口 提交結果 使用哈希數組更快…

Qt模塊化架構設計教程 -- 輕松上手插件開發

概述 在軟件開發領域,隨著項目的增長和需求的變化,保持代碼的可維護性和擴展性變得尤為重要。一個有效的解決方案是采用模塊化架構,尤其是利用插件系統來增強應用的功能性和靈活性。Qt框架提供了一套強大的插件機制,可以幫助開發者輕松實現這種架構。 模塊化與插件系統 模…

深入理解 HashMap 的索引計算:右移與異或的作用

在 Java 中&#xff0c;HashMap 是一種高效的數據結構&#xff0c;它通過將鍵映射到數組中的索引位置來實現快速的插入和查找。但之前看源碼總是理解到它要hash之后散列到數組中某一個位置&#xff0c;但卻從未深究它究竟怎么散列的&#xff0c;如果不夠散那就意味著hash沖突增…