关于插入排序算法,你需要知道什么

203 阅读2分钟

前言

  • 什么是插入排序

  • 为什么插入排序很重要

  • 插入排序的性能

  • 插入排序的原理

  • Java代码实现

正文

  • 什么是插入排序?

它是一种简单的排序算法,只需遍历一次数组即可完成排序。

  • 为什么插入排序很重要?

插入排序有几个优势:

  1. 算法简单好理解

  2. 相同的值不需要交换顺序

  3. 数组可以一边增加内容,一边排序

  4. 对小数据集很高效,特别是和其他算法相比,比如有些时间复杂度要到O(n²)

  5. 只有一个常数,时间复杂度是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");

}

}

恭喜你,你现在应该了解插入排序算法了。