前言
-
什么是插入排序
-
为什么插入排序很重要
-
插入排序的性能
-
插入排序的原理
-
Java代码实现
正文
- 什么是插入排序?
它是一种简单的排序算法,只需遍历一次数组即可完成排序。
- 为什么插入排序很重要?
插入排序有几个优势:
-
算法简单好理解
-
相同的值不需要交换顺序
-
数组可以一边增加内容,一边排序
-
对小数据集很高效,特别是和其他算法相比,比如有些时间复杂度要到O(n²)
-
只有一个常数,时间复杂度是O(1)。
- 插入排序的性能
最差的性能是 O(n²)的比较和交换
最好的性能是O(n) 的比较和O(1)的交换
平均的性能是O(n²) 的比较和交换
- 插入排序的原理
在每次迭代中,它对比当前元素和下一个元素,检查当前元素是否比它大。
如果大的话,就原地不动,进行下一个元素。如果小的话,它会一直向前比对,一直找到正确的位置。
- java代码的实现
提示:看代码之前,你可以自己试着动手实现.
package com.sanjula.java.algorithms.InsertionSort;
public class InsertionSort {
/**
* Sort method using insertion sort
* @param arr - Integer array passed in
* to be sorted
**/
public void sort(int arr[]){
// Store the length of the array
int n = arr.length;
// For loop to iterate through each
for (int i = 0; i < n; i++){
// Storing current element to check correct position
int key = arr[i];
int j = i - 1;
// Move element to correct position if
// condition is true
while(j >= 0 && arr[j] > key){
arr[j + 1] = arr[j];
j = j - 1;
}
arr[j + 1] = key;
}
}
/**
* Print the array supplied
* @param arr - Array passed
* @param msg - Message to be printed
**/
public static void printArray(int arr[], String msg) {
int length = arr.length;
System.out.println(msg);
for (int i = 0; i < length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
public static void main(String[] args) {
// Initialize and declare the array arr
int arr[] = {25, 12, 3, 1, 9, 15};
// Create new instance of class InsertionSort
InsertionSort insertionSort = new InsertionSort();
printArray(arr, "Array before insertion sort");
// Invoke the sort method, passing in the array arr
insertionSort.sort(arr);
// Print the sorted array
printArray(arr, "Array after insertion sort");
}
}
恭喜你,你现在应该了解插入排序算法了。