一稳捆、數(shù)組高級(jí)冒泡排序
需求: 對(duì)數(shù)組元素:{24, 69, 80, 57, 13}進(jìn)行冒泡排序
分析: 相鄰元素兩兩比較,大的往后放尾抑,第一次完畢最大值出現(xiàn)在了最大索引處念链。
第一次比較arr[0]和arr[1]、arr[1]和arr[2]贝润、arr[2]和arr[3]绊茧、arr[3]和arr[4];比較4次打掘,得出最大數(shù)80
第二次比較arr[0]和arr[1]华畏、arr[1]和arr[2]、arr[2]和arr[3]尊蚁;比較3次亡笑,得出最大數(shù)69
第三次比較arr[0]和arr[1]、arr[1]和arr[2]枝誊;比較2次况芒,得出最大數(shù)57
第四次比較arr[0]和arr[1];得出最大值24叶撒,比較1次绝骚,比較完成
通過這分析我們可以知道5個(gè)數(shù)只需要比較4次,所以外層需要通過一個(gè)for循環(huán)去控制祠够,循環(huán)的次數(shù)就是arr.length-1压汪。總共我們需要比較四大次古瓤,但是在第一大次中止剖,還需要比較四小次。然后第二大次中落君,還需要比較三小次穿香,依次類推,我們可以得到一個(gè)規(guī)律绎速,只要分析出思路皮获,接下來的代碼是容易實(shí)現(xiàn)的了。-
圖解
image.png -
運(yùn)行結(jié)果
image.png 代碼(完整)
package algorithm;
/**
* Project:Kotlin
* Package:algorithm
* Author:SKFsky
* Description: 排序纹冤,冒泡排序和選擇排序及二分查找
*/
public class algorithm_sort {
public static void main(String[] args) {
demo1()//冒泡排序
//demo2();//選擇排序
}
public static void demo1(){
int[] arr = {24, 69, 80, 57, 13};
int temp = 0;
for (int i = 0;i<arr.length-1;i++) {
for (int j = 0;j<arr.length-i-1;j++) {
if (arr[j]>arr[j+1]){
temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
}
}
}
for (int i = 0;i<arr.length;i++) {
System.out.println(arr[i]);
}
}
}
二洒宝、數(shù)組高級(jí)選擇排序
需求: 對(duì)數(shù)組元素:{24, 69, 80, 57, 13}進(jìn)行選擇排序
分析:
第一次arr[0]和arr[1],arr[0]和arr[2],arr[0]和arr[3],arr[0]和arr[4],比較四次,求出arr[0]最小值16萌京,下次排序不帶最小值
第二次arr[1]和arr[2],arr[1]和arr[3],arr[1]和arr[4],比較三次雁歌,求出arr[1]最小值24,下次排序不帶最小值
第三次arr[2]和arr[3],arr[2]和arr[4],比較兩次知残,求出arr[2]最小值35靠瞎,下次排序不帶最小值
第四次arr[3]和arr[4],比較一次,求出arr[2]最小值70,比較結(jié)束-
圖解:
image.png -
運(yùn)行結(jié)果:
image.png 代碼展示:
public static void demo2(){
int[] arr = {24, 69, 80, 57, 13};
int temp = 0;
for (int i = 0;i<arr.length-1;i++) {
for (int j = i+1;j<arr.length;j++){
if (arr[i]>arr[j]) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
for (int i = 0;i<arr.length;i++) {
System.out.println(arr[i]);
}
}
總結(jié):算法題難的不在于代碼的實(shí)現(xiàn)较坛,而在于我們的思路印蔗,只要能理清思路總結(jié)出規(guī)律扒最,用代碼只是去實(shí)現(xiàn)了丑勤,思路還是需要多練才是王道,練多了也就有經(jīng)驗(yàn)了吧趣。