數據結構基本排序算法

冒泡排序

package com.lei.go;

public class BubbleSort {
	public static void  main(String [] args) {
		
		int [] a ={1,3,5,12,4,6,1};
		a=bubbleSort(a, 7);
		for (int i = 0; i < a.length; i++) {
			System.out.println(a[i]);
		}
		
	}
    public static void bubbleSort(int[] A, int n) {
    	
    	 if (A == null || A.length < 2) {
             return null;
         }
        // 將數組中相鄰的兩個元素進行比較。
        for (int i = 0; i < n; i++) {
        	//   第i次 結束   時數組中i+1個  元素有序    所以 j=n-1-i
			for (int j = 0; j < n-i-1; j++) {
				//  大的元素向後移動。    
				if (A[j]>A[j+1]) {
					A[j]=A[j+1]+A[j];
					A[j+1]= A[j]-A[j+1];
					A[j]=A[j]-A[j+1];
				}
			}
		}
        
    }
  
}

插入排序

package com.lei.go;

public class InsertionSort {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int [] a ={1,3,5,12,4,6,1};
		System.out.println("排序之前:");
		for (int i = 0; i < a.length; i++) {
			System.out.print(a[i]+"");
		}
		insertionSort(a, 7);
		System.out.println();
		System.out.println("排序之後:");
		for (int i = 0; i < a.length; i++) {
			System.out.println(a[i]);
		}
	}

	public static void insertionSort(int[] A, int n) {
       
		int temp ;
	  for (int i = 0; i < n-1; i++) {
		 // 每次從  第1個位置開始 向前查找。   前邊的元素比當前位置大就交換位置。 如果前邊的比當前的元素小就停止
		for (int j = i; j >= 0; j--) {
			if (A[j+1]<A[j]) {
				temp = A[j+1];
				A[j+1] = A[j];
				A[j] = temp;
			}
			else {
				break;
			}
			
		}
		
	  }
       }
}

二分插入排序

package com.lei.go;

public class BinarySort {
	public static void main(String[] args) {
		int[] a = { 49, 38, 65, 97, 176, 213, 227, 49, 78, 34, 12, 164, 11, 18,1 };
		System.out.println("排序之前:");
		for (int i = 0; i < a.length; i++) {
			System.out.print(a[i] + " ");
		}
		// 二分插入排序
		binarySort(a);
		System.out.println();
		System.out.println("排序之後:");
		for (int i = 0; i < a.length; i++) {
			System.out.print(a[i] + " ");
		}
	}

	private static void binarySort(int[] a) {
		for (int i = 0; i < a.length; i++) {
			int temp = a[i];
			int left = 0;
			int right = i - 1;
			int mid = 0;
			// 進行二分 分割。  直到分割成 僅有一個元素時   分割停止
			while (left <= right) {
				mid = (left + right) / 2;
				if (temp < a[mid]) {
					right = mid - 1;
				} else {
					left = mid + 1;
				}
			}
			// a[i] < 有序數組中某個值。  則需要將  a[i]插入到 某個位置,然後將後邊的數組依次向後移動一位
			//如果 a[i] >所有有序數組中的元素,則不要移動
			for (int j = i - 1; j >= left; j--) {
				a[j + 1] = a[j];
			}
			// 將移動之後空出來的位置  放入 待排序的   a[i]
			if (left != i) {
				a[left] = temp;
			}
		}
	}
}

選擇排序

package com.lei.go;

public class SelectionSort {
	
	public static void main(String [] args){
		
		int [] a={1,2,7,8,3,2,1};
		selectionSort(a,7);
		//打印時注意 a.length 才能打印出所有結果   <
		for (int i = 0; i < a.length; i++) {
			System.out.println(b[i]);
		}
		
	}
    public static void selectionSort(int[] A, int n) {
    	//每次選擇一個最小的放在當前未排序數組最前邊。 
    	int temp;
    	for (int i = 0; i <n; i++) {
    		for (int j = i+1; j < n; j++) {
//    			 依次與其後邊的剩餘數組進行比較,如果後邊的比a[i]小。則交換兩個元素。
    			//  每次循環結束,找到一個當前最新元素
				if (A[j]<A[i]) {
					temp = A[i];
					A[i] =A[j];
					A[j] = temp;
				}
			}
	}
    	
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章