热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

七大经典排序算法实现汇总

学习与整理留存。七大排序算法分析排序算法时间复杂度(平均)空间复杂度稳定性

学习与整理留存。

七大排序算法分析
排序算法 时间复杂度(平均) 空间复杂度 稳定性
冒泡排序 O(n^2) O(1) 稳定    
插入排序 O(n^2) O(1) 稳定
选择排序 O(n^2) O(1) 不稳定
快速排序 O(nlog n) O(log n) 不稳定
希尔排序 O(nlog n) O(1) 不稳定
归并排序 O(nlog n) O(n) 稳定
堆排序 O(nlog n) O(1) 不稳定

亲测好用C/C++实现汇总:

#include 
#include 
#include 
#define NUM 50
using namespace std;

//交换函数
void swap(int *a,int i,int j)
{
	int tmp = a[i];
	a[i] = a[j];
	a[j] = tmp;
}
//输出函数
void print(int *a)
{
	for(int i=0;i= high || high <= 0 || low <0)
		return;
	bool flag = true;
	for(int i=0; ia[j+1])
			{
				swap(a,j,j+1);
				flag = true;
			}
		}
	}
}
//选择排序
void select_sort(int *a,int low,int high)
{
	if(a == NULL || low >= high || high <= 0 || low <0)
		return;
	int minpos;
	for(int i=0;i= high || high <= 0 || low <0)
		return;
	int tmp;
	for(int i=1;i=0;--j)
		{
			if(a[j]>tmp)
				a[j+1]=a[j];
			else
				break;
		}
		if(j+1 != i)
			a[j+1]=tmp;
	}
}
//快速排序
int partition(int *a,int low,int high)
{
	int pivot = a[low];
	while(low=pivot)
			--high;
		a[low]=a[high];
		while(low= high || high <= 0 || low <0)
		return;
	int pos;
	while(low= high || high <= 0 || low <0)
		return;
	int mid = (low+high)>>1;
	merge_sort(a,low,mid);
	merge_sort(a,mid+1,high);

	merge(a,low,mid,high); 
}
//堆排序
void adjust(int *a,int low,int high)//大顶堆
{
	int tmp=a[low];
	for(int i=(low<<1)+1;i=a[i])
			break;
		a[low]=a[i];
		low=i;
	}
	a[low]=tmp;
}
void heap_sort(int *a,int low,int high)
{
	if(a == NULL || low >= high || high <= 0 || low <0)
		return;
	for(int i=high>>1;i>=0;--i)
		adjust(a,i,high);
	for(int i=high;i>0;--i)
	{
		swap(a,0,i);
		adjust(a,0,i);
	}
}
//希尔排序
void shell_sort(int *a,int low,int high)
{
	if(a == NULL || low >= high || high <= 0 || low <0)
		return;

		/*设置增量*/
	int d = high+1;
	while (d > 1)
	{
		d = (d + 1)>>1;
		for (int i = d; i <= high; ++i)
		{						
			/*要插入的元素*/
			int tmp = a[i];
			/*从已有序序列尾向前寻找合适位置*/
			int j = i-d;
			for (; j >= low; j-=d)
			{
				if (a[j] > tmp)
					a[j + d] = a[j];
				else
					break;
			}
			a[j + d] = tmp;
		}
	}
}
int main()
{
	int a[NUM],b[NUM];
	clock_t start,end;
	srand(time(0));
	cout<<"original array:";
	for(int i=0;i 
 

测试:

original array:295 233 178 260 312 24 81 106 220 184 243 109 383 178 184 325 10 370 363 2 26 314 129 366 8 118 384 152 137 224 292 385 9 23 245 274 399 278 380 219 62 175 280 398 353 64 275 315 34 238 
bubble_sort:2 8 9 10 23 24 26 34 62 64 81 106 109 118 129 137 152 175 178 178 184 184 219 220 224 233 238 243 245 260 274 275 278 280 292 295 312 314 315 325 353 363 366 370 380 383 384 385 398 399 
time:12ms
select_sort:2 8 9 10 23 24 26 34 62 64 81 106 109 118 129 137 152 175 178 178 184 184 219 220 224 233 238 243 245 260 274 275 278 280 292 295 312 314 315 325 353 363 366 370 380 383 384 385 398 399 
time:8ms
insert_sort:2 8 9 10 23 24 26 34 62 64 81 106 109 118 129 137 152 175 178 178 184 184 219 220 224 233 238 243 245 260 274 275 278 280 292 295 312 314 315 325 353 363 366 370 380 383 384 385 398 399 
time:4ms
quick_sort:2 8 9 10 23 24 26 34 62 64 81 106 109 118 129 137 152 175 178 178 184 184 219 220 224 233 238 243 245 260 274 275 278 280 292 295 312 314 315 325 353 363 366 370 380 383 384 385 398 399 
time:5ms
merge_sort:2 8 9 10 23 24 26 34 62 64 81 106 109 118 129 137 152 175 178 178 184 184 219 220 224 233 238 243 245 260 274 275 278 280 292 295 312 314 315 325 353 363 366 370 380 383 384 385 398 399 
time:8ms
heap_sort:2 8 9 10 23 24 26 34 62 64 81 106 109 118 129 137 152 175 178 178 184 184 219 220 224 233 238 243 245 260 274 275 278 280 292 295 312 314 315 325 353 363 366 370 380 383 384 385 398 399 
time:5ms
shell_sort:2 8 9 10 23 24 26 34 62 64 81 106 109 118 129 137 152 175 178 178 184 184 219 220 224 233 238 243 245 260 274 275 278 280 292 295 312 314 315 325 353 363 366 370 380 383 384 385 398 399 
time:7ms



推荐阅读
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  • 使用C++编写程序实现增加或删除桌面的右键列表项
    本文介绍了使用C++编写程序实现增加或删除桌面的右键列表项的方法。首先通过操作注册表来实现增加或删除右键列表项的目的,然后使用管理注册表的函数来编写程序。文章详细介绍了使用的五种函数:RegCreateKey、RegSetValueEx、RegOpenKeyEx、RegDeleteKey和RegCloseKey,并给出了增加一项的函数写法。通过本文的方法,可以方便地自定义桌面的右键列表项。 ... [详细]
  • 欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路。现给定一个图,问是否存在欧拉回路?Input测 ... [详细]
  • 开发笔记:快速排序和堆排序
    本文由编程笔记#小编为大家整理,主要介绍了快速排序和堆排序相关的知识,希望对你有一定的参考价值。快速排序思想:在partition中,首先以最右边的值作为划分值x,分别维护小于 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 本文介绍了一种划分和计数油田地块的方法。根据给定的条件,通过遍历和DFS算法,将符合条件的地块标记为不符合条件的地块,并进行计数。同时,还介绍了如何判断点是否在给定范围内的方法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
author-avatar
zhangwenkaii_555
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有