排序之插入排序

在计算机科学中,排序算法是一种将一组元素按照某种特定顺序排列的方法。插入排序是一种简单且易于理解的排序算法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增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)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

相关推荐
iceslime5 分钟前
旅行商问题(TSP)的 C++ 动态规划解法教学攻略
数据结构·c++·算法·算法设计与分析
aichitang20241 小时前
矩阵详解:从基础概念到实际应用
线性代数·算法·矩阵
OpenCSG2 小时前
电子行业AI赋能软件开发经典案例——某金融软件公司
人工智能·算法·金融·开源
witton2 小时前
美化显示LLDB调试的数据结构
数据结构·python·lldb·美化·debugger·mupdf·pretty printer
chao_7892 小时前
链表题解——环形链表 II【LeetCode】
数据结构·leetcode·链表
dfsj660113 小时前
LLMs 系列科普文(14)
人工智能·深度学习·算法
薛定谔的算法3 小时前
《盗梦空间》与JavaScript中的递归
算法
kaiaaaa3 小时前
算法训练第十一天
数据结构·算法
?!7143 小时前
算法打卡第18天
c++·算法
springfe01014 小时前
构建大顶堆
前端·算法