算法进阶——插入排序

说明:以下C++代码的实现参考严蔚敏的《数据结构(C语言版)》

实验目的:有序列{{49,1},{38,2},{65,3},{97,4},{76,5},{13,6},{27,7},{49,8}};其中{a,b}把a视为key,按照key的大小使用插入排序对序列进行排序

算法图示:


实验代码:

c10_1.cpp

#ifndef C10_1_H
#define C10_1_H

#include <iostream>
using namespace std;

#define MAXSIZE 20
typedef int KeyType;
typedef int InfoType;

typedef struct
{
	KeyType key;
	InfoType info;
}RedType;

typedef struct
{
	RedType r[MAXSIZE+1];//r[0]闲置,用作哨兵单元(用来存储要插入的数)
	int length;
}SqList;//连续的存储空间存储排序数据

class CLSort
{
private:
	SqList *list;
public:
	CLSort(SqList &list);
//	CLSort(const CLSort &sort);//拷贝构造函数
	void InsertSort();
	void printSqList();
	
};

#endif
algorithm10_1.cpp

#include "c10_1.h"

CLSort::CLSort(SqList &list)
{
	this->list = &list;
}

void CLSort::InsertSort()
{
	int i,j;
	for(i = 2; i<=(*list).length; i++)
	{
		if((*list).r[i].key<(*list).r[i-1].key)
		{
			(*list).r[0] = (*list).r[i];
//			(*list).r[i] = (*list).r[i-1];
//			for(j=i-2; (*list).r[0].key<(*list).r[j].key; j--)
			for(j=i-1; (*list).r[0].key<(*list).r[j].key; j--)
			{
				(*list).r[j+1] = (*list).r[j]; 
			}
			(*list).r[j+1] = (*list).r[0];
		}
	}
}

void CLSort::printSqList()
{
	for(int i=1; i<= (*list).length; i++)
	{
		cout<<(*list).r[i].key<<","<<(*list).r[i].info<<"  ";
	}
	cout<<endl;
}
main10_1.cpp

#include "c10_1.h"
#define N 8
 
int main()
{
	RedType d[N]={{49,1},{38,2},{65,3},{97,4},{76,5},{13,6},{27,7},{49,8}};

	SqList list;
	for(int i=1; i<=N; i++ )
	{
		list.r[i] = d[i-1];
	}
	list.length = N;

	CLSort sort(list);
	cout<<"排序前:"<<endl;
	sort.printSqList();
	sort.InsertSort();
	cout<<"排序后:"<<endl;
	sort.printSqList();
}
测试结果:


算法复杂度分析:

       对于插入排序,如果含n个数的序列已经按从小到大排列好了,根据程序的实现可知程序只进行了n-1次数据比较和0次数据移动结束了程序的运行。当这个序列是从大到小排列时,程序执行时间最长,需要进行(n-1)(n+2)/21+2+...+n-1+n-1)次数据比较,还需要进行(n-1)(n+4)/22+3+...+n-1+n+n-1)次数据移动。由以上分析,(n-1+0+(n-1)(n+2)/2+(n-1)(n+4)/2)/2=(n-1)(n+4)/2,所以算法复杂度为O(n*n)


基于pytorch实现中国交通警察指挥8种手势识别源码+数据集+模型+详细项目说明,该项目是个人毕设项目,答辩评审分达到98分,代码都经过调试测试,确保可以运行!欢迎下载使用,可用于小白学习、进阶。该资源主要针对计算机、通信、人工智能、自动化等相关专业的学生、老师或从业者下载使用,亦可作为期末课程设计、课程大作业、毕业设计等。项目整体具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,以实现不同的功能。 基于pytorch实现中国交通警察指挥8种手势识别源码+数据集+模型+详细项目说明基于pytorch实现中国交通警察指挥8种手势识别源码+数据集+模型+详细项目说明基于pytorch实现中国交通警察指挥8种手势识别源码+数据集+模型+详细项目说明基于pytorch实现中国交通警察指挥8种手势识别源码+数据集+模型+详细项目说明基于pytorch实现中国交通警察指挥8种手势识别源码+数据集+模型+详细项目说明基于pytorch实现中国交通警察指挥8种手势识别源码+数据集+模型+详细项目说明基于pytorch实现中国交通警察指挥8种手势识别源码+数据集+模型+详细项目说明基于pytorch实现中国交通警察指挥8种手势识别源码+数据集+模型+详细项目说明基于pytorch实现中国交通警察指挥8种手势识别源码+数据集+模型+详细项目说明基于pytorch实现中国交通警察指挥8种手势识别源码+数据集+模型+详细项目说明基于pytorch实现中国交通警察指挥8种手势识别源码+数据集+模型+详细项目说明基于pytorch实现中国交通警察指挥8种手势识别源码+数据集+模型+详细项目说明基于pytorch实现中国交通警察指挥8种手势识别源码+数据集+模型+详细项目说明基于pytorch实现中国交通警察指挥8种手势识别源码+数据集+模型+详细项目说明基于pytorch实现中国交通警察指
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值