直接選擇排序法(注意區分與氣泡排序的區別)
阿新 • • 發佈:2019-02-19
直接選擇排序法是將指定排序位置與其他陣列元素分別對比,如果滿足條件就交換元素,注意區分氣泡排序,他不是交換相鄰的,而是把滿足條件的與指定位置的交換。
比如array{7,8,6,5,9,3,1},指定把最大的放在最後一位,先從第一位開始比較,8比7大,則下一次就是6與8比較(因為6比8小),再5與8比較,以此類推
for(int j=1;j<a.length;j++){ int index=0; for(int i=1;i<=a.length-j;i++){ if(a[i]>a[index]){ index=i; /* * 交換下一個要比較的值,但不是交換兩個值的內容 * 比如a2與a1比較,現在換成a3與a2比較,而不是交換a2和a1的值 */ } }
到最後一位再交換位置
for(int j=1;j<a.length;j++){ int index=0; for(int i=1;i<=a.length-j;i++){ if(a[i]>a[index]){ index=i; /* * 交換下一個要比較的值,但不是交換兩個值的內容 * 比如a2與a1比較,現在換成a3與a2比較,而不是交換a2和a1的值 */ } } /* * 不能放在第二個for裡面,因為要到最後再交換位置 */ temp=a[a.length-j]; a[a.length-j]=a[index]; a[index]=temp; }
實現從小到大(大的在最後)的排列順序
程式碼如下
public static void main(String[] args) { // TODO Auto-generated method stub int a[]=new int[]{7,8,6,5,9,3,1}; int temp; System.out.println("排序前的陣列"); for(int i=0; i<a.length;i++){ System.out.print(a[i]+"\t"); } for(int j=1;j<a.length;j++){ int index=0; for(int i=1;i<=a.length-j;i++){ if(a[i]>a[index]){ index=i; /* * 交換下一個要比較的值,但不是交換兩個值的內容 * 比如a2與a1比較,現在換成a3與a2比較,而不是交換a2和a1的值 */ } } /* * 不能放在第二個for裡面,因為要到最後再交換位置 */ temp=a[a.length-j]; a[a.length-j]=a[index]; a[index]=temp; } System.out.println(); System.out.println("排序後的陣列"); for(int i=0;i<a.length;i++){ System.out.print(a[i]+"\t"); } } }