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

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

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 稳定
相关推荐
颜酱25 分钟前
BFS 与并查集实战总结:从基础框架到刷题落地
javascript·后端·算法
casual~1 小时前
第?个质数(埃氏筛算法)
数据结构·c++·算法
仰泳的熊猫1 小时前
题目2308:蓝桥杯2019年第十届省赛真题-旋转
数据结构·c++·算法·蓝桥杯
hssfscv2 小时前
力扣练习训练2(java)——二叉树的中序遍历、对称二叉树、二叉树的最大深度、买卖股票的最佳时机
java·数据结构·算法
y = xⁿ3 小时前
【LeetCodehot100】二叉树大合集 T94:二叉树的中序遍历 T104:二叉树的最大深度 T226:翻转二叉树 T101:对称二叉树
后端·算法·深度优先
不想看见4043 小时前
Search a 2D Matrix II数组--力扣101算法题解笔记
数据结构·算法
IronMurphy3 小时前
【算法二十六】108. 将有序数组转换为二叉搜索树 98. 验证二叉搜索树
数据结构·算法·leetcode
jaysee-sjc3 小时前
【练习十二】Java实现年会红包雨小游戏
java·开发语言·算法·游戏·intellij-idea
im_AMBER3 小时前
Leetcode 141 最长公共前缀 | 罗马数字转整数
算法·leetcode
InfiniSynapse3 小时前
连上Snowflake就能取数:InfiniSynapse + Spider2-Snow实战企业数据分析
数据结构·图像处理·人工智能·算法·语言模型·数据挖掘·数据分析