introduction to algorithms sorting lesson 1 insertion

本文详细介绍了插入排序的基本原理及实现方式,包括非递归与递归两种算法,并探讨了获取数组长度的方法及其在C/C++中的具体应用。

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

插入排序  demo
#define getArraySize(arrayName) (sizeof(arrayName)/sizeof(arrayName[0])) //获取数组长度

void insertion(int data[],int len)
{
	//sorting
	int key;
	int i;
	//getArraySize(data) =  1  并不等于10
    for (int j=1;j<len;j++)   //从左到右插入排序
    {
		key=data[j];
		i=j-1;
		while(i>=0&&data[i]>key)  找到插入位置
		{
			data[i+1]=data[i];
			i--;
		}
        data[i+1]=key; //插入到正确位置
    }
	//output
	for (i=0;i<len;i++)
	{
		cout<<data[i]<<" ";
	}
	cout<<endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
	int data_test[10]={1,0,2,9,3,1,5,8,9,10};
	insertion(data_test,getArraySize(data_test));//得到len=10
	system("pause");
	return 0;
}


获取整型数组长度问题
在main函数中得到len=10正确,而在函数调用中得到len=1
c/c++在函数传参中,数组名传参退化为指针,则sizeof(arrayName)得到的结果为4 即指针类型长度
而sizeof(arrayName[0])得到也是4 为整型长度


插入排序递归算法

基本思想:将A[n] 插入的A[ 1……n-1]中,假设A[ 1……n-1]已经排好序

则可以递归代码为

/********insertion recursion algorithm************/
void insertion_recursion(int data[],int n)
{
	if(n>0)
	{   
		insertion_recursion(data,n-1);
		int key=data[n];              //将n插入的1……n-1中
		int i=n-1;
		while(i>=0&&data[i]<key)
		{
			data[i+1]=data[i];
			i--;
		}
		data[i+1]=key;
	}
}

递归算法分析    当n=0时,T(n)=c

                            当n>0时,T(n)=T(n-1)+c*(n-1)

运用数学归纳法可得到:

                          T(n) = O(n²/2)与非递归算法效率一样















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值