插入排序

本文详细介绍了插入排序的基本思想、算法描述及实现过程。插入排序是一种简单直观的排序算法,通过不断将未排序数组的第一个元素插入到已排序数组的适当位置来完成排序。适合于小规模数据的排序。

插入排序算法分析

 

已知n个元素的无序数组A

 

基本思想:将数组A看做由已排序部分B和未排序部分C组成,然后取出C中的第一个元素,并与B中的数组元素从右向左依次比较,直到找到比它小的元素,并插入其后,重复以上步骤,直到数组中C中的元素全部插入到B中,则此时B即为A数组排序后的结果。

 

正确性分析:(1)初始情况下,将A中的第一个元素看做B,剩余为C,显然B此时为已排序的!

                  (2)将C中的元素ci 插入到B中,这时总能在B中找到一个位置,使得B为有序数组;

 

算法描述:

 

 

%插入排序,A为待排序数组
function A = my_insert(A)
size_a = size(A,2);
for i = 2:1:size_a
    j = i - 1;
    key = A(i);
    while(j > 0 && key < A(j))
        A(j+1) = A(j);
        j = j - 1;
    end
    A(j+1) = key;
end

 

 时间复杂度: o(n^2)

 

 优点:算法稳定,排序在本数组内进行,节省内存,适用于数组元素少的情况。

 缺点:当比较次数越多时,移动元素次数的次数也会越多,不适用于大量元素的排序。

 

 

//直接插入排序
	public static int[] insertSort(int _data[]){
	int len = _data.length;
	int result[] = new int[len];
	int j, key;
	for(int i = 0; i < len; i++){
		//j为结果数组中最后一个元素的位置,初始为负值,直接放入 结果数组
		j = i - 1;
		key = _data[i];
		//从右往左依次比较移动元素,若比需插入的元素大,向后移动,否则插入结果数组
		while(j >= 0 && result[j] > key){
			result[j+1] = result[j];
			j--;
		}
		result[j+1] = key;
	}
	return result;
}
 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值