1. 程式人生 > >直接選擇排序法(注意區分與氣泡排序的區別)

直接選擇排序法(注意區分與氣泡排序的區別)

直接選擇排序法是將指定排序位置與其他陣列元素分別對比,如果滿足條件就交換元素,注意區分氣泡排序,他不是交換相鄰的,而是把滿足條件的與指定位置的交換。

比如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");

		}			
		}
								
}