算法也能降低时间复杂度???—————算法延伸

先来补充一下哈希表遗留的一些问题:

1.哈希表的打印:

哈希表的各个基础节点存储在指针数组中,我们可以先把指针数据的元素接出来再去遍历每一个节点的元素;

c 复制代码
void hashtableshow(void)
{
	int i=0;
	node_t ptemp = NULL;
	for(i=0;i<10;i++)
	{
		printf("%d\n",i);
		ptemp = phashtable[i];
		while(ptemp != NULL)
		{
			printf("%d\n",ptemp->data);
			ptemp = ptemp->pnext;
		}
		printf("\n");
	}
}
		
		
	

数据结构与算法

分类:

按时间复杂度由高到低排列:

1.冒泡排序:

2.选择排序 :

3.插入排序:

4.希尔排序:

5.快速排序:

具体的步骤展示:

1.冒泡排序:

c 复制代码
void bubblesort(int *p,int len)
{
	int i = 0;
	int j = 0;
	for(j=0;i<len-1;i++)
	{	
		for(i=0;i<len-1-j;i++)
		{
			if(p[i] < p[i+1])
			{
				t = p[i];
				p[i] = p[i+1];
				p[i+1] = t;
			}
		}
	}
	return;
}

选择排序:

c 复制代码
void selectsort(int p*,int len)
{	
	int i=0,j=0;
	int no=0;
	for(j=0;j<len-1;j++)
	{ 
		no = j;
		for(i=j+1;i<len;i++)
		{
			if(p[no] > p[i])
			{
				no = i;
			}
		}
		if(no != j)
		{
			t = p[no];
			p[no] = p[j];
			p[j] = t;
		}
	}
	return;
}

3.插入排序:

c 复制代码
void insersort(int *phead,int len)
{
	int i=0,j=0;
	int tem;
	for(j=1;j<len;j++)
	{
		tem = phead[j];
		for(i=j;i>0 && phead[i-1] > tem;i--)
		{
			phead[i] = phead[i-1];
		}
		phead[i] = tem;
	}
	return;
}

4.希尔排序:(插入排序的优化)

  • 先将数组变为大致有序
  • 设置步长,步长取数组长度的一半
  • 循环取对半步长,直至取到0;
c 复制代码
void shellsort(int *phead,int len)
{
	int step = 0;
	int i = 0;
	int j = 0;
	int tem=0;
	for(step = len/2;step>0;step /= 2)
	{
		for(j=step;j<len;j++)
		{
			tem = phead[j];
			for(i=j;i>step-1 && phead[i-step] > tem; i-=step)
			{	
				phead[i] = phead[i-step];
			}
			phead[i] = tem;
		}
	}
	retuen;
}

5.快速排序:

  • 定义键值指向最左侧元素;
c 复制代码
void quicksort(int *p,int low,int high)
{
	int i=low;
	int j=high;
	int key = p[low];
	while(i < j)
	{
		while(i < j && p[j] >= key)
		{
			j--;
		}
		p[i] =  p[j];
		while(i < j && p[i] <= key)
		{
			i++;
		}
		p[j] = p[i];
	}
	p[i] = key;
	if(low < i-1)
	{
		quicksort(p,low,i-1);
	}
	if(i+1 < high)
	{
		quicksort(p,i+1,high);
	}
	return;
}

排序算法稳定性评估

相同大小元素在排序完后,相对位置是否发生改变

若未改变则为稳定

若改变则为不稳定

排序方式和 时间复杂度 稳定性
冒泡排序 O(n^2) 稳定
选择排序 O(n^2) 稳定
插入排序 O(n^2) 稳定
希尔排序 O(n*logn) 稳定
快速排序 O(n*logn 稳定
相关推荐
岛雨QA1 天前
查找算法「Java数据结构与算法学习笔记7」
数据结构·算法
宝贝儿好1 天前
【强化学习】第十章:连续动作空间强化学习:随机高斯策略、DPG算法
人工智能·python·深度学习·算法·机器人
isyoungboy1 天前
从图像中提取亚像素边缘点
算法
郝学胜-神的一滴1 天前
深入理解链表:从基础到实践
开发语言·数据结构·c++·算法·链表·架构
岛雨QA1 天前
排序算法「Java数据结构与算法学习笔记6」
数据结构·算法
烟花落o1 天前
栈和队列的知识点及代码
开发语言·数据结构·笔记·栈和队列·编程学习
熬夜有啥好1 天前
Linux软件编程——综合小练习
linux·算法·目录遍历·fgets·strcpy·linux内核与用户交互·strtok
古译汉书1 天前
【IoT死磕系列】Day 7:只传8字节怎么控机械臂?学习工业控制 CANopen 的“对象字典”(附企业级源码)
数据结构·stm32·物联网·http
民乐团扒谱机1 天前
【硬核解析】网易云听歌/哼歌识曲底层技术:从算法实现到工程落地(附核心公式/伪代码)
算法
Z9fish1 天前
sse哈工大C语言编程练习23
c语言·数据结构·算法