Java学习手册:(数据结构与算法-排序)插入排序

本文深入讲解了插入排序算法的基本思想及实现过程,通过一个具体的排序示例,详细演示了如何将待排序元素逐个插入已排序序列的过程。文章还提供了一个Java实现的插入排序代码示例,展示了算法的具体应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

算法思想:在一个已排好序的记录子集的基础上,每一步将下一个待排序的记录有序地插入到已排好序的记录子集中,直到将所有待排序记录全部插入为止。

例子:举个栗子,对5,3,8,6,4这个无序序列进行简单插入排序,首先假设第一个数的位置时正确的,想一下在拿到第一张牌的时候,没必要整理。然后3要插到5前面,把5后移一位,变成3,5,8,6,4.想一下整理牌的时候应该也是这样吧。然后8不用动,6插在8前面,8后移一位,4插在5前面,从5开始都向后移一位。注意在插入一个数的时候要保证这个数前面的数已经有序。简单插入排序的时间复杂度也是O(n^2)。

 

package com.haobi;
/*
 * 插入排序(升序)
 * 1、使用temp临时保存待插入记录
 * 2、从后往前查找应插入的位置
 * 3、查找与移动在同一循环中完成
 * 
 */
public class InsertSort {
	//对数组a直接做插入排序
	public static void insertSort(int[] a) {
		if(a != null) {//如果数组不为空
			for(int i=1;i<a.length;i++) {//经历a.length-1次循环进行插入排序
				int temp = a[i];//存放待插入数据
				int j = i;
				if(a[j-1]>temp) {//如果待插入数的前一个数大于待插入数,需要进行插入排序
					while(j>=1 && a[j-1]>temp) {//从已排好序的子集里找到合适的插入位置,并进行相应的数据交换
						a[j] = a[j-1];
						j--;
					}
				}
				a[j] = temp;//将待插入的数据插入
			}
		}
	}
	public static void main(String[] args) {
		int[] array = {64,5,7,89,6,24};
		insertSort(array);
		for(int i=0;i<array.length;i++) {
			System.out.print(array[i]+" ");
		}
	}
}

程序输出结果如下:

5 6 7 24 64 89 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值