Java_Basic_InsertionSort

【插入排序】:https://baike.baidu.com/item/插入排序

有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。

插入排序的基本思想是:每步将一个待排序的记录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。


import java.util.Arrays;

public class InsertionSort_03 {

	public static void main(String[] args) {
		int arr2[] = {12, 3, 5, 2, 6, 44, 2, 1};
		InsertionSort_03 sorter = new InsertionSort_03();
		sorter.insertionSort(arr2);
	}
	// 插入排序 
	// 时间复杂度与数据状况有关系:{1, 2, 3, 4, 5}  这里就是O(N)
	// 时间复杂度与数据状况有关系:{5, 4, 3, 2, 1}  这里就是O(N的平方)
	public static void insertionSort(int[] arr) {
		if (arr == null || arr.length < 2) {
			return;
		}
		// i 从1位置开始,先满足0~1满足有序
		// 然后再满足i = 2,  满足0~2上有序
		// 如果发生交换了,还得往前走。
		//         a 
		//    i-1  i
		//    j    j+1 // j开始等于i-1,对比arr[j]>arr[j+1] 等同于对比 arr[i-1] > arr[i]
		//   如果前面的数比后面的数大,交换,然后 j-- 往前走,继续判断
		for (int i = 1; i < arr.length; i++) {
			for (int j = i - 1; j >= 0 && arr[j] > arr[j+1]; j--) {
				swap(arr, j, j+1);
			}
		}
		showArray(arr);
	}
	
	public static void swap(int[] arr, int i, int j) {
		int temp = arr[i];
		arr[i] = arr[j];
		arr[j] = temp;
 	}
	
	public static void showArray(int[] arr) {
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + " ");
		}
	}
	
	
	 

}

猜你喜欢

转载自blog.csdn.net/sinat_15355869/article/details/81260520