排序演算法及其子演算法
阿新 • • 發佈:2018-11-26
排序演算法及其子演算法
各類排序演算法
插入排序(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 : (linear time)
- Auxiliary Space : (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] + " ");
}
}