1. 程式人生 > >排序演算法及其子演算法

排序演算法及其子演算法

排序演算法及其子演算法

各類排序演算法

插入排序(insertion sort), 選擇排序(selection sort),

插入排序(insertion sort)

public class InsertSort {
    public static void insertSort(int[] a) {
        int i,
j, insertNote;// 要插入的資料 for (i = 1; i < a.length; i++) {// 從陣列的第二個元素開始迴圈將陣列中的元素插入 insertNote = a[i];// 設定陣列中的第2個元素為第一次迴圈要插入的資料 j = i - 1; while (j >= 0 && insertNote < a[j]) { a[j + 1] = a[j];// 如果要插入的元素小於第j個元素,就將第j個元素向後移動 j--
; } a[j + 1] = insertNote;// 直到要插入的元素不小於第j個元素,將insertNote插入到陣列中 } } public static void main(String[] args) { int a[] = { 38,65,97,76,13,27,49 }; insertSort(a); System.out.println(Arrays.toString(a)); } }

融合排序(Merge Sort)

merge two sorted array

  • Time Complexity : O ( n 1 + n 2 ) O(n1 + n2) (linear time)
  • Auxiliary Space : O ( n 1 + n 2 ) O(n1 + n2) (not in-place)
// Java program to merge two sorted arrays 
import java.util.*; 
import java.lang.*; 
import java.io.*; 

class MergeTwoSorted 
{ 
	// Merge arr1[0..n1-1] and arr2[0..n2-1] 
	// into arr3[0..n1+n2-1] 
	public static void mergeArrays(int[] arr1, int[] arr2, int n1, 
								int n2, int[] arr3) 
	{ 
		int i = 0, j = 0, k = 0; 
	
		// Traverse both array 
		while (i<n1 && j <n2) 
		{ 
			// Check if current element of first 
			// array is smaller than current element 
			// of second array. If yes, store first 
			// array element and increment first array 
			// index. Otherwise do same with second array 
			if (arr1[i] <= arr2[j])  //這裡<=可以保證用於merge sort的時候是stable的,原來順序不變
				arr3[k++] = arr1[i++]; 
			else
				arr3[k++] = arr2[j++]; 
		} 
	
		// Store remaining elements of first array 
		while (i < n1) 
			arr3[k++] = arr1[i++]; 
	
		// Store remaining elements of second array 
		while (j < n2) 
			arr3[k++] = arr2[j++]; 
	} 
	
	public static void main (String[] args) 
	{ 
		int[] arr1 = {1, 3, 5, 7}; 
		int n1 = arr1.length; 
	
		int[] arr2 = {2, 4, 6, 8}; 
		int n2 = arr2.length; 
	
		int[] arr3 = new int[n1+n2]; 
		
		mergeArrays(arr1, arr2, n1, n2, arr3); 
	
		System.out.println("Array after merging"); 
		for (int i=0; i < n1+n2; i++) 
			System.out.print(arr3[i] + " "); 
	} 
}