java冒泡排序和選擇排序詳解
1、冒泡排序
冒泡排序(Bubble Sorting)的基本思想是:通過(guò)對(duì)待
排序序列從前向后(從下標(biāo)較小的元素開(kāi)始),依次比較相鄰元素的值,若發(fā)現(xiàn)逆序則交換,使值較大的元素逐漸從前移向后部,就象水底下的氣泡一樣逐漸向上冒。
因?yàn)榕判虻倪^(guò)程中,各元素不斷接近自己的位置,如果一趟比較下
來(lái)沒(méi)有進(jìn)行過(guò)交換,就說(shuō)明序列有序。
圖解冒泡排序算法的過(guò)程
原始數(shù)組:3, 9, -1, 10, 20
第一趟排序
(1) 3, 9, -1, 10, 20 // 如果相鄰的元素逆序就交換
(2) 3, -1, 9, 10, 20
(3) 3, -1, 9, 10, 20
(4) 3, -1, 9, 10, 20
第二趟排序
(1) -1, 3, 9, 10, 20 //交換
(2) -1, 3, 9, 10, 20
(3) -1, 3, 9, 10, 20
第三趟排序
(1) -1, 3, 9, 10, 20
(2) -1, 3, 9, 10, 20
第四趟排序
(1) -1, 3, 9, 10, 20
小結(jié)冒泡排序規(guī)則
(1) 一共進(jìn)行 數(shù)組的大小-1 次 大的循環(huán)
(2)每一趟排序的次數(shù)在逐漸的減少
(3) 如果我們發(fā)現(xiàn)在某趟排序中,沒(méi)有發(fā)生一次交換, 可以提前結(jié)束冒泡排序。這個(gè)就是優(yōu)化
import java.util.Arrays;
public class BubbleSort {
public static void main(String[] args) {
// TODO Auto-generated method stub
int arr[]= {3,9,-1,10,-2};
//第i+1趟排序,將最大的數(shù)排在最后
int temp=0;//臨時(shí)變量
for(int i=0;i<arr.length-1;i++) {//定義第幾輪排序
for(int j=0;j<arr.length-1-i;j++) {
if(arr[j+1]<arr[j]) {
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
System.out.println("輸出第"+(i+1)+"趟排序的結(jié)果");
System.out.println(Arrays.toString(arr));
}
}
}
運(yùn)行結(jié)果:
輸出第1趟排序的結(jié)果
[3, -1, 9, -2, 10]
輸出第2趟排序的結(jié)果
[-1, 3, -2, 9, 10]
輸出第3趟排序的結(jié)果
[-1, -2, 3, 9, 10]
輸出第4趟排序的結(jié)果
[-2, -1, 3, 9, 10]
2、選擇排序法
排序思路:
原始的數(shù)組 : 101, 34, 119, 1
第一輪排序 : 1, 34, 119, 101
第二輪排序 : 1, 34, 119, 101
第三輪排序 : 1, 34, 101, 119
說(shuō)明:
1.選擇排序一共有 數(shù)組大小 - 1 輪排序
2.每1輪排序,又是一個(gè)循環(huán), 循環(huán)的規(guī)則(代碼)
- 2.1先假定當(dāng)前這個(gè)數(shù)是最小數(shù)
- 2.2 然后和后面的每個(gè)數(shù)進(jìn)行比較,如果發(fā)現(xiàn)有比當(dāng)前數(shù)更小的數(shù),就重新確定最小數(shù),并得到下標(biāo)
- 2.3 當(dāng)遍歷到數(shù)組的最后時(shí),就得到本輪最小數(shù)和下標(biāo)
- 2.4 交換 [代碼中再繼續(xù)說(shuō) ]
import java.util.Arrays;
public class QuickSort {
public static void main(String[] args) {
//int []arr={ 8,3,2,1,7,4,6,5};
int [] arr={101,34,109,1};
quicksort(arr);
}
public static void quicksort(int []arr){
for(int j=0;j<arr.length-1;j++) {
int minindex=j;//假定當(dāng)前下標(biāo)為最小值下標(biāo)
int minnumber=arr[j];//假定當(dāng)前元素為最小值
for (int i = 1+j; i < arr.length; i++) {
if (arr[i] < minnumber) {//若假定最小值并不是最小的
minnumber = arr[i];//重置minnumber
minindex = i;//重置minindex
}
}
//將最小值交換
arr[minindex] = arr[j];
arr[j] = minnumber;
System.out.println("第"+(j+1)+"輪");
System.out.println(Arrays.toString(arr));
}
}
}
總結(jié)
本篇文章就到這里了,希望可以給你帶來(lái)一些幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
SSH框架網(wǎng)上商城項(xiàng)目第16戰(zhàn)之Hibernate二級(jí)緩存處理首頁(yè)熱門(mén)顯示
這篇文章主要介紹了SSH框架網(wǎng)上商城項(xiàng)目第16戰(zhàn)之Hibernate的二級(jí)緩存處理首頁(yè)的熱門(mén)顯示,感興趣的小伙伴們可以參考一下2016-06-06
SpringMVC打印請(qǐng)求參數(shù)和響應(yīng)數(shù)據(jù)最優(yōu)方案
項(xiàng)目中經(jīng)常需要打印http請(qǐng)求的參數(shù)和響應(yīng)數(shù)據(jù),本文給大家講解如何在SpringMVC打印請(qǐng)求參數(shù)和響應(yīng)數(shù)據(jù)最優(yōu)方案,感興趣的朋友跟隨小編一起看看吧2023-07-07
Springboot集成MongoDB無(wú)認(rèn)證與開(kāi)啟認(rèn)證的配置方式
本文主要介紹了Springboot集成MongoDB無(wú)認(rèn)證與開(kāi)啟認(rèn)證的配置方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-03-03
MyBatis如何使用PageHelper實(shí)現(xiàn)分頁(yè)查詢(xún)
這篇文章主要介紹了MyBatis如何使用PageHelper實(shí)現(xiàn)分頁(yè)查詢(xún),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
idea debug沒(méi)有force step into的問(wèn)題解決
本文主要介紹了IDEA Debug中ForceStepInto按鈕消失的問(wèn)題及解決方法,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-10-10
詳解SpringBoot注冊(cè)Windows服務(wù)和啟動(dòng)報(bào)錯(cuò)的原因
這篇文章主要介紹了詳解SpringBoot注冊(cè)Windows服務(wù)和啟動(dòng)報(bào)錯(cuò)的原因,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-03-03
IntelliJ IDEA(或者JetBrains PyCharm)中彈出"IntelliJ IDEA License
今天小編就為大家分享一篇關(guān)于IntelliJ IDEA(或者JetBrains PyCharm)中彈出"IntelliJ IDEA License Activation"的解決辦法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-10-10
SpringBoot接口防抖(防重復(fù)提交)的實(shí)現(xiàn)方法
SpringBoot接口防抖主要通過(guò)前端和后端兩種方式實(shí)現(xiàn),前端通過(guò)JavaScript控制用戶(hù)操作,后端通過(guò)攔截器、過(guò)濾器等機(jī)制控制請(qǐng)求頻率,文中介紹的非常詳細(xì),感興趣的可以了解一下2024-11-11

