08 選擇排序
準備作業
public class SelectionSort {
public static void main(String[] args) {
//selection sort是快速排序的意思
int[] a={55,77,22,44,88,-8};
System.out.println("需要排序的原陣列a如下所示:");
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+"\t");
}
System.out.println();//換行
}
}
A.升序
1.思路分析:
//核心是找最大值
//升序思路:
//1.找到陣列當前部分的最大值的下標,并把它賦值給max_index(每次尋找前會重置為0)
//2.把最大值與陣列當前部分的最后一個元素交換
//3.回圈1,2步驟,直到最外層回圈遍歷結束
//陣列當前部分(說明)----->
//設陣列 int a[]={1,-33,44,5,7,99};
//第一次,陣列當前部分為1到99這六個元素,所以max_index=5,最后一個元素的坐標為a.length-1;
//把a[max_index]與a[a.length-1]交換,最后一個元素已經確定
//第二次,陣列的當前部分為1到7這五個元素....................倒數第二個元素已經確定
//第三次,陣列的當前部分為1到5這四個元素
//注意:降序部分與升序的部分的陣列的當前部分是一致的
2.核心代碼
for (int i = 0; i < a.length-1; i++) {
//a.length-1是因為第一個數不用交換了,因為后面的數已經排好序了
int max_index=0;//使a[max_index]為陣列a的第一個元素
for (int j = 1; j < a.length-i; j++) {
//第一個不用比,所以默認從第二個開始比較
if(a[j]>=a[max_index]){
max_index=j;
}
}
int temp=a[max_index];
a[max_index]=a[a.length-1-i];
a[a.length-1-i]=temp;
}
//排序后(升序)的陣列為:
System.out.println("排序后的陣列a(升序)如下所示");
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+"\t");
}
3.運行截圖

B.降序
1.思路分析:
//核心是找最小值
//降序思路:
//1.找到陣列當前部分的最小值的下標,并把它賦值給min_index(每次尋找前會重置為0)
//2.把最小值與陣列當前部分的最后一個元素交換
//3.回圈1,2步驟,直到最外層回圈遍歷結束
2.核心代碼:
for (int i = 0; i < a.length-1; i++) {
//a.length-1是因為第一個數不用交換了,因為后面的數已經排好序了
int min_index=0;//使a[max_index]為陣列a的第一個元素
for (int j = 1; j < a.length-i; j++) {
//第一個不用比,所以默認從第二個開始比較
if(a[j]<=a[min_index]){
min_index=j;
}
}
int temp=a[min_index];
a[min_index]=a[a.length-1-i];
a[a.length-1-i]=temp;
}
//排序后(降序)的陣列為:
System.out.println("排序后的陣列a(降序)如下所示");
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+"\t");
}
3.運行截圖

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/227641.html
標籤:Java
上一篇:07 陣列的反序
