排序之插入排序

在计算机科学中,排序算法是一种将一组元素按照某种特定顺序排列的方法。插入排序是一种简单且易于理解的排序算法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。

基本思想

插入排序的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排序的子序列中的适当位置,直到全部记录插入完成为止。

具体步骤如下:

  1. 从第一个元素开始,该元素可以认为已经被排序
  2. 取出下一个元素,在已经排序的元素序列中从后向前扫描
  3. 如果该元素(已排序)大于新元素,将该元素移到下一位置
  4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
  5. 将新元素插入到该位置后
  6. 重复步骤2~5

插入排序的主要优点是对于部分有序的数组,插入排序的效率非常高,甚至可以达到线性排序的效率。但是插入排序对于大规模数据的排序效率不高。

时间复杂度:最坏情况下为O(N*N),此时待排序列为逆序,或者说接近逆序
      最好情况下为O(N),此时待排序列为升序,或者说接近升序。
空间复杂度:O(1)

Java代码实现

下面是使用Java语言实现插入排序的代码:

java 复制代码
import java.util.Arrays;
//插入排序
public class InsertSort {

	public static void main(String[] args) {
		int[] arr = {5,7,4,2,0,3,1,6};
		sort(arr);
		System.out.println(Arrays.toString(arr));
	}

	public static void sort(int[] arr) {
		for(int i=1;i<arr.length;i++) {
			for(int j=i-1;j>=0;j--) {
				if(arr[j]>arr[j+1]) {
					int temp = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = temp;
				}else {
					break;
				}
			}
		}
	}
}

这段代码首先定义了一个待排序的数组arr,然后调用sort方法对其进行排序。sort方法使用了嵌套的for循环来实现插入排序。外层循环从第二个元素开始,内层循环则从当前元素的前一个元素开始,如果前一个元素大于后一个元素,就交换它们的位置。这个过程会一直持续到整个数组都被排序。

运行结果

当你运行这段代码时,它会输出排序后的数组:[0, 1, 2, 3, 4, 5, 6, 7]。这就是插入排序的结果。

总结

插入排序是一种简单而有效的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

相关推荐
式5167 小时前
线性代数(八)非齐次方程组的解的结构
线性代数·算法·机器学习
Nandeska8 小时前
2、数据库的索引与底层数据结构
数据结构·数据库
橘颂TA8 小时前
【剑斩OFFER】算法的暴力美学——翻转对
算法·排序算法·结构与算法
叠叠乐8 小时前
robot_state_publisher 参数
java·前端·算法
hweiyu008 小时前
排序算法:冒泡排序
算法·排序算法
brave and determined8 小时前
CANN训练营 学习(day9)昇腾AscendC算子开发实战:从零到性能冠军
人工智能·算法·机器学习·ai·开发环境·算子开发·昇腾ai
Dave.B9 小时前
用【vtk3DLinearGridCrinkleExtractor】快速提取3D网格相交面
算法·3d·vtk
yaoh.wang9 小时前
力扣(LeetCode) 1: 两数之和 - 解法思路
python·程序人生·算法·leetcode·面试·跳槽·哈希算法
又是忙碌的一天9 小时前
二叉树的构建与增删改查(2) 删除节点
数据结构
Code Slacker9 小时前
LeetCode Hot100 —— 滑动窗口(面试纯背版)(四)
数据结构·c++·算法·leetcode